2011-12-12 106 views
0

如何使用正則表達式從文本中提取所有出現的字符串?正則表達式搜索所有出現的字符串

我的情況是:

輸入文本:i:0#.f|ldapmember|tom;i:0#.f|ldaprole|peter;i:0#.f|ldapmember|mary;

提取所有發生i:0#.f|ldapmember|與繼續字符,直到;

搜索結果將是:i:0#.f|ldapmember|tom;i:0#.f|ldapmember|mary;

+4

(我恨,這是習慣性的問...)什麼語言?你有什麼嘗試? – aevanko

+0

從字面上回答你的問題:通常語言提供提取子字符串的方法。例如。在JS中:var matches = str.matches(pattern);'。 –

+0

感謝您的幫助。對不起,不提這個語言。我認爲這種語言應該是.NET,因爲我在建立在SharePoint上的「Nintex Workflow」下使用正則表達式。 –

回答

1

這應該這樣做,捕獲的LDAP成員名稱在組1中:

i:0\#\.f\|ldapmember\|([^;]*); 
+0

你錯過了全球旗幟,因爲他們要求*所有*出現,但一旦這個適用這個作品。 – iain

+1

@lain:「全局」標誌是特定於實現的;由於沒有指定語言,因此不清楚這是否必要/支持/需要或不需要。例如,在Java或.NET中使用此正則表達式時,不需要該標誌。 – Lucero

+0

這很公平,但我認爲它仍然值得一提,因爲大多數其他正則表達式都需要它(或者應用類似的方法,比如Ruby中的scan)。 – iain

1

這裏是一個Perl的方式來做到這一點:

#!/usr/bin/perl 
use Modern::Perl; 

my $str = 'i:0#.f|ldapmember|tom;i:0#.f|ldaprole|peter;i:0#.f|ldapmember|mary;'; 
my @occ = $str =~ /(i:0#\.f\|ldapmember\|[^;]+)/g; 
say join('',@occ); 

輸出:

i:0#.f|ldapmember|tomi:0#.f|ldapmember|mary 
+0

感謝您的幫助。對不起,不提這個語言。我認爲這種語言應該是.NET,因爲我在建立在SharePoint上的「Nintex Workflow」下使用正則表達式。 –

相關問題