正则表达式捕获特定单词之间的单词

时间:2011-08-09 19:48:12

标签: regex perl

我正在尝试使用匹配的正则表达式:(它不应与任何其他字符串匹配)

Word1 or Word2 or Word3 or Wordn

在“或”之前或之后捕捉单词

1: Word1
2: Word2
3: Word3
n: Wordn

我尝试修改csv正则表达式:

(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)

(?:^|(?:or)((?:[^(?:or)]+)*|[^(?:or)]*)

但这并没有给我我想要的东西。

我确定我错过了一些东西,但我已经敲了几个小时。

5 个答案:

答案 0 :(得分:1)

尝试在' or '上分割字符串。

答案 1 :(得分:1)

你知道,这不是我自然会为正则表达式所达到的目标。我先尝试拆分。

my @words = split / or /, $string;

答案 2 :(得分:1)

怎么样:

my $string = "  foo or    bar or  foobar ";
if ( $string =~ m|^\s*[^\s]+(\s+or\s+[^\s]+)+\s*$| ) {
    my $tmp = "$string";
    $tmp =~ s|^\s+||;
    $tmp =~ s|\s+$||;
    my @words = split( /\s+or\s+/, $tmp );
    printf( "Found %d words:\n", scalar( @words ) );
    foreach my $word ( @words ) {
        print( "\t'$word'\n" );
    }
} else {
    print( "No match\n" );
}

以上将输出:

Found 3 words:
    'foo'
    'bar'
    'foobar'

答案 3 :(得分:0)

此正则表达式将匹配至少具有word1 or word2的任何字符串,以及之后的任何数字或更多数字。它也必须在字符串的开头或结尾没有空格,但如果要在较大的字符串中搜索此表单的字符串,则可以删除^$

(?:^(\w+)(?=\s+or))|(?:\s+or\s+(\w+))+

RegexPal

答案 4 :(得分:0)

真正的解决方案是分成' or '。正则表达式解决方案并非如此直接。

$sm =~ / or / and @between_or = $sm =~ /(?:^\s*|(?<= or ))(.+?)(?= or |\s*$)/sg;