2011-07-26 21 views
0

単語FOOを持ち、同じ行の後にBARを持つフレーズのすべてのインスタンスを見つける必要があります。単語の先頭と次の単語を検索する正規表現

それは同じようにフォーマットされています[asdf_123/FOO_sdfsdsadasff.x] BAR 123

+1

言語? – raym0nd

+0

はperlのためにそれを必要とします –

答えて

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'も見つけるでしょう。ユーザーが少なくとも1つの文字を分離する必要があると主張する場合は、「FOO。+ BAR」 –

0
.*FOO.*BAR.* 

は正常に動作するはずです。

+1

に注意してください。先頭の '。*'は、これをあまり効率的にしません。正規表現エンジンは最初に(貪欲なマッチのために)行の最後まで実行され、最初の 'F'を見つけるまでバックトラックし、' O'などを探します。最初の 'を削除します。 * 'を探し、最初から文字列を調べてFOOを見つける。 "BAR"の前に "。*"のところに "greedy match"ヒットがありますが、それについてはあまりできません。 –

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'

関連する問題