2011-12-12 46 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”下使用正则表达式。 –

相关问题