需要找到具有單詞FOO的短語的每個實例,並且在同一行之後有一段時間有BAR。正則表達式可以找到單詞的開始和下一個單詞
它的格式如下:[asdf_123/FOO_sdfsdsadasff.x] BAR 123
需要找到具有單詞FOO的短語的每個實例,並且在同一行之後有一段時間有BAR。正則表達式可以找到單詞的開始和下一個單詞
它的格式如下:[asdf_123/FOO_sdfsdsadasff.x] BAR 123
如何FOO.*BAR
;那樣有用嗎?
簡單
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
好又簡單:這也會找到'FOOBAR'。如果用戶堅持至少應該有一個字符將單詞分開,那麼它應該是'FOO。+ BAR' –
.*FOO.*BAR.*
應該可以正常工作。
但有一點需要注意,儘管如此。領先的'。*'使得效率降低。正則表達式引擎將首先運行到最後(由於貪婪的匹配),然後回溯直到找到第一個'F',然後查找'O'等。丟棄第一個'。 *'它從頭開始檢查字符串,直到找到「FOO」。在「BAR」之前,你仍然會在'。*'上進行「貪婪的匹配」,但是對此沒有太多可以做的事情。 –
問題是關於什麼構成'短語'有點含糊不清,但這裏可能是一種方法來做到這一點。
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'
哪種語言? – raym0nd
perl需要它 –