在字符串中连续出现的字符替换为单一字符(2 位领导批示)

如字符串 aaaabbbccccddddeeeefff

一位同学的写法:

  1. <?php
  2. $original_string = 'aaaabbbccccddddeeeefff';
  3. $splited_arr = str_split( $original_string );
  4. $unique_arr = array_unique( $splited_arr );
  5. $final_string = "";
  6. foreach ($unique_arr as $unique_str)
  7. {
  8.   $final_string .= $unique_str;
  9. }
  10. echo $final_string;
  11. ?>

 

我用正则替换:

  1. <?php
  2. $str = 'aaaabbbccccddddeeeefff';
  3. echo preg_replace("/(.)\\1+/", "\\1", $str);
  4. ?>

 

NOTE:如果字符中有中文.只能使用第一种方法.

Perl学习之字符串和排序(0 位领导批示)

Perl被设计成90%擅长处理文本,10%处理其余的问题。因此Perl有强大的文本处理能力,包括正则表达式。但有时正则表达式过于复杂,需要一种更简单的方法来处理字符串。

一、使用索引寻找子串

查找的方法依赖于查找的地方。如果在一个大字符串中查找,可以使用index函数。

Perl查找子串第一次在大字符串中出现的地方,返回第一个字符的位置。字符位置是从0开始编号的。如果子串在字符串的开头处找到,则index返回0。如果一个字符后,则返回1,依次类推。如果子串不存在,则返回-1。

1
2
3
my $text = "hello world!";
my $where = index($text, "wor");
print $where;#本例输出6

index函数总是报告子串出现的第一个位置。可以使用可选的第三个参数要求它从后面的某个地方开始查询,它会告诉index从什么位置开始。

NOTE:通常不能重复的查找某个子串,除非使用了循环。

如果想知道某个子串最后出现的位置。可以使用rindex 函数来做到。

1
2
3
my $text = "hello world!";
my $where = rindex($text, "l");
print $where;#本例输出9

rindex函数也有可选的第三个参数,它给出的是可能的最大值。

全文阅读 »

随机显示的10篇日志

评论最多的10篇日志

浏览最多的10篇日志