用正则表达式替换重复字符

Adi*_*tii 8 regex

我需要一个正则表达式脚本来删除这些特定单词的双重复.如果出现这些字符,请将其替换为单个.

/[\s.'-,{2,0}]
Run Code Online (Sandbox Code Playgroud)

这些是如果他们来了我需要用同一个字符替换它的角色.

amp*_*ine 15

这是你正在寻找的正则表达式吗?

/([\s.'-,])\1+/
Run Code Online (Sandbox Code Playgroud)

好的,现在它将匹配它.如果您使用的是Perl,则可以使用以下表达式替换它:

s/([\s.'-,])\1+/$1/g
Run Code Online (Sandbox Code Playgroud)

编辑:如果您正在使用:ahem:PHP,那么您将使用以下语法:

$out = preg_replace('/([\s.\'-,])\1+/', '$1', $in);
Run Code Online (Sandbox Code Playgroud)

()组匹配字符,\1表示它在括号中匹配的相同内容至少再次出现.在替换中,$1指的是第一组括号中的匹配.

注意:这是Perl兼容的正则表达式(PCRE)语法.

perlretut手册页:

匹配重复

上一节中的示例显示了令人讨厌的弱点.我们只匹配3个字母的单词,或4个字母或更少的单词.我们希望能够匹配单词或更常见的任意长度的字符串,而无需写出繁琐的替代方案\w\w\w\w|\w\w\w|\w\w|\w.

这也正是量词元字符的问题?,*,+,和{}是为创建.它们允许我们划分我们认为匹配的正则表达式的一部分的重复次数.量词放在我们想要指定的字符,字符类或分组之后.它们具有以下含义:

  • a? 意思是:匹配'a'1或0次

  • a* 表示:匹配'a'0次或更多次,即任意次

  • a+ 表示:匹配'a'1次或更多次,即至少一次

  • a{n,m} 意思是:匹配至少"n"次,但不超过"m"次.

  • a{n,} 意思是:匹配至少"n"次或更多次

  • a{n} 意思是:完全匹配"n"次