2011-07-26 85 views

回答

0

如何FOO.*BAR;那樣有用嗎?

1

簡單

FOO.*BAR 

可能會做

更新後的語言竟然是perl的

#!/usr/bin/perl 

while (<DATA>) { 
    print if $_ =~ /FOO.*BAR/; 
} 

__DATA__ 
[asdf_123/FOO_sdfsdsadasff.x] BAR 123 
illegal string 
FOO without 
without BAR 

輸出:

[asdf_123/FOO_sdfsdsadasff.x] BAR 123 
+2

好又簡單:這也會找到'FOOBAR'。如果用戶堅持至少應該有一個字符將單詞分開,那麼它應該是'FOO。+ BAR' –

0
.*FOO.*BAR.* 

應該可以正常工作。

+1

但有一點需要注意,儘管如此。領先的'。*'使得效率降低。正則表達式引擎將首先運行到最後(由於貪婪的匹配),然後回溯直到找到第一個'F',然後查找'O'等。丟棄第一個'。 *'它從頭開始檢查字符串,直到找到「FOO」。在「BAR」之前,你仍然會在'。*'上進行「貪婪的匹配」,但是對此沒有太多可以做的事情。 –

0

問題是關於什麼構成'短語'有點含糊不清,但這裏可能是一種方法來做到這一點。

use strict; 
use warnings; 

my @samples = (
'asdf_123/FOO_sdfsdsadasff.x BAR 123', 
'FOOBAR BARFOO /ssBARaa', 
'asdf FOOkkBAR zzFOO BAR', 
); 

for (@samples) 
{ 
    my @phrases =/(\S*FOO\S*)\s (?=.*BAR) /xg; 
    print "'$_'\n" for @phrases; 
} 

__END__ 

輸出:

'asdf_123/FOO_sdfsdsadasff.x'
'FOOBAR'
'BARFOO'
'FOOkkBAR'
'zzFOO'

相關問題