使用正则表达式匹配包含逗号的单词之前的所有内容

时间:2015-04-19 21:37:33

标签: regex perl

假设我有这句话:

  

四年前和七年前,我们的祖先

我希望获得以逗号结尾的单词(即之前的单词),但不能使用逗号本身。

在上面的示例中,我想匹配粗体文本:

四年级和七年之前,我们的祖先

我该怎么做?

3 个答案:

答案 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

下面,您可以看到绿色捕获的内容 enter image description here

这个正则表达式将会:

(.*?) \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