2012-07-23 43 views
1

我不是Perl和正则表达式的专家。所以这是我的问题。perl正则表达式匹配一个字符后面的所有单词

我该如何写一个正则表达式来匹配指定字符右边的字符串中的所有单词,并在perl中分别检索每个单词?

我不明白我如何匹配未指定数量的单词,然后最重要的是一次检索一个单词?如果这是不可能的,在perl中我最好的选择是什么?

例如:我有一个C赋值,如b = var1 + var2。我希望能够提取var1和var2(如果存在)。重要的是我不想匹配特定的var1和var2。但是赋值运算符后的任何变量。

感谢您的帮助!

+0

请改进您的问题,包括您使用的任何样本作为语料库来测试。此外,请包含一份格式正确的**期望输出样本**,以便人们了解您试图达到的结果。 – 2012-07-23 00:58:35

+0

没有人知道确切的字符串问题答案可以是任何东西 - 更具体。 – 2012-07-23 01:01:32

回答

3

\G/pos可能有用。

$_ = 'b=var1+var2'; 
# force further /g matches to start after the first '=' 
/=/g; 

while (/(\w+)/g) { 
    print "$1\n"; 
} 

# prints 
# var1 
# var2 
+1

你测试过了吗?第二个正则表达式需要'/ g'修饰符。而且使用'/ =/g'修改'pos'更清晰,在此之后分配是不必要的。 – Borodin 2012-07-23 03:05:49

+0

@Borodin我做了测试,但搞砸了重新输入到SO。修正了,谢谢,它比手动的'pos()='更清洁。 – ephemient 2012-07-23 03:12:07

+1

也不需要'标量'。虚空环境的作用也一样:) – Borodin 2012-07-23 03:13:45

0

您可以在正则表达式中使用嵌套组。因此,例如下面的正则表达式应该匹配在等号后面的所有单词(定义为\ w,但你可以调整它)(不是\ w划分,但你可以调整它):

=((?<Word>\w*)[^\w]*)* 
1

或许下面会为你工作:

use Modern::Perl; 

my $string = 'b=var1+var2'; 
my $after = '='; 

say for ($string =~ /$after(.*)/)[0] =~ /(\w+)/g; 

输出:

var1 
var2 

希望这有助于!

相关问题