2012-07-23 45 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 

希望這有助於!

相關問題