我正在尝试使用匹配的正则表达式:(它不应与任何其他字符串匹配)
Word1 or Word2 or Word3 or Wordn
在“或”之前或之后捕捉单词
1: Word1
2: Word2
3: Word3
n: Wordn
我尝试修改csv正则表达式:
(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)
到
(?:^|(?:or)((?:[^(?:or)]+)*|[^(?:or)]*)
但这并没有给我我想要的东西。
我确定我错过了一些东西,但我已经敲了几个小时。
答案 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+))+
答案 4 :(得分:0)
真正的解决方案是分成' or '
。正则表达式解决方案并非如此直接。
$sm =~ / or / and @between_or = $sm =~ /(?:^\s*|(?<= or ))(.+?)(?= or |\s*$)/sg;