假设我有这句话:
四年前和七年前,我们的祖先
我希望获得以逗号结尾的单词(即之前的单词),但不能使用逗号本身。
在上面的示例中,我想匹配粗体文本:
四年级和七年之前,我们的祖先
我该怎么做?
答案 0 :(得分:2)
OP用逗号询问最多这个词的所有内容。这可以这样做:
#!/usr/bin/perl -w
my $s = 'Four score and seven years ago, our forefathers';
print "$1\n" if ($s =~ /^([^,]+)\b\w+,.*/);
结果是
Four score and seven years
答案 1 :(得分:1)
您可以使用此正则表达式:
(.*?) \w+, <-- you can use \s instead of a space: (.*?)\s\w+,
<强> Working demo 强>
下面,您可以看到绿色捕获的内容
这个正则表达式将会:
(.*?) \w+,
^ ^
| +-- the first word with a spaces before and a comma
+--- captures everything (ungreedy) until the first word which contains a comma
答案 2 :(得分:1)
此解决方案匹配字符串开头的所有字符,直到到达可选空格后面的点,然后是可选的非空格,然后是逗号。请注意,它也会在包含逗号的字词之前停止,例如abc,def
,但我认为可以吗?
use strict;
use warnings;
use 5.010;
my $s = 'Four score and seven years ago, our forefathers';
print "$1\n" if $s =~ /((?:(?!\s*\S*,).)*)/;
<强>输出强>
Four score and seven years