我正在寻找能找到重复字母的正则表达式。所以任何两次或更多的字母,例如:

booooooot or abbott

我不会提前知道我要找的那封信。

这是我在采访中被问到的问题,然后在采访中被问到。没有那么多人认真对待。

有帮助吗?

解决方案

您可以找到任何字母,然后使用 \ 1 来第二次(或更多)找到相同的字母。如果您只需要知道这封信,那么 $ 1 将包含它。否则,您可以将第二个匹配连接到第一个匹配。

my $str = "Foooooobar";

$str =~ /(\w)(\1+)/;

print $1;
# prints 'o'
print $1 . $2;
# prints 'oooooo'

其他提示

我认为你真的想要这个而不是“\ w”因为这包括数字和下划线。

([a-zA-Z])\1+

好的,好的,我可以暗示Leon。将此用于unicode-world或posix的东西。

([[:alpha:]])\1+

我认为使用反向引用会起作用:

(\w)\1+

\ w 基本上是 [a-zA-Z_0-9] 所以如果你只想匹配A和Z之间的字母(不区分大小写),请使用 [a-zA-Z] 而不是。

(编辑:或者,就像Tanktalus在评论中提到的那样(以及其他人也回答过), [[:alpha:]] ,是区域敏感的)

使用\ N来引用以前的组:

/(\w)\1+/g

您可能需要注意被认为是字母的内容,这取决于您的语言环境。使用ISO Latin-1将允许重音的西方语言字符匹配为字母。在以下程序中,默认语言环境无法识别é,因此 créé 无法匹配。取消注释区域设置代码,然后它开始匹配。

另请注意\ w包括数字和下划线字符以及所有字母。要获得字母,您需要使用非字母,数字和下划线字符的补码。这只留下字母。

通过将其定义为“什么正则表达式匹配除3之外的任何数字?”这个问题可能更容易理解,答案是/ [^ \ D3] /。

#! /usr/local/bin/perl

use strict;
use warnings;

# uncomment the following three lines:
# use locale;
# use POSIX;
# setlocale(LC_CTYPE, 'fr_FR.ISO8859-1');

while (<DATA>) {
    chomp;
    if (/([^\W_0-9])\1+/) {
        print "

您可能需要注意被认为是字母的内容,这取决于您的语言环境。使用ISO Latin-1将允许重音的西方语言字符匹配为字母。在以下程序中,默认语言环境无法识别&#233;,因此 cr&#233;&#233; 无法匹配。取消注释区域设置代码,然后它开始匹配。

另请注意\ w包括数字和下划线字符以及所有字母。要获得字母,您需要使用非字母,数字和下划线字符的补码。这只留下字母。

通过将其定义为“什么正则表达式匹配除3之外的任何数字?”这个问题可能更容易理解,答案是/ [^ \ D3] /。

<*>: dup [$1]\n"; } else { print "

您可能需要注意被认为是字母的内容,这取决于您的语言环境。使用ISO Latin-1将允许重音的西方语言字符匹配为字母。在以下程序中,默认语言环境无法识别&#233;,因此 cr&#233;&#233; 无法匹配。取消注释区域设置代码,然后它开始匹配。

另请注意\ w包括数字和下划线字符以及所有字母。要获得字母,您需要使用非字母,数字和下划线字符的补码。这只留下字母。

通过将其定义为“什么正则表达式匹配除3之外的任何数字?”这个问题可能更容易理解,答案是/ [^ \ D3] /。

<*>: nope\n"; } } __DATA__ 100 food créé a::b

以下代码将返回所有重复两次或更多次的字符。

my $ str =&quot; SSSannnkaaarsss&quot;;

打印$ str =〜/(\ w)\ 1 + / g;

只是为了踢,一种完全不同的方法:

if ( ($str ^ substr($str,1) ) =~ /\0+/ ) {
    print "found ", substr($str, $-[0], <*>[0]-$-[0]+1), " at offset ", $-[0];
}

仅供参考,除了RegExBuddy,一个真正方便的免费网站用于测试正则表达式是 Regexr at gskinner.com 。很好地处理([[:alpha:]])(\ 1 +)

怎么样:

(\w)\1+

第一部分围绕一个角色创建一个未命名的组,然后反向引用查找相同的角色。

我认为这也应该有效:

<代码>((\ w)的(?= \ 2))+ \ 2

/(.)\\1{2,}+/u

'u'修饰符与unicode匹配

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top