0

特定のパターンの後に文字列が存在するかどうかを照合しようとしています。パターンは「パターン」「間にあるもの」「[後]」です。大文字小文字を区別しません。

例えば

pattern 1 [after] ABC
pattern 2 [after] 123 abc DEX
pattern 3 [after] 
pattern 12345123 [after]
pattern @ASd#98 @_90sd [after] xyz dec
[after] 4 pattern

だから私が得たい結果は、

pattern 1 [after] ABC
pattern 2 [after] 123 abc DEX
pattern @ASd#98 @_90sd [after] xyz dec

「柄」で始まり「【後】」で終わる、間に挟まれたものでも構いません。

[ ] の区切りを組み込むのに苦労しています & 文字列が一緒に存在する場合。

私は試しました、私が得た最も近いものは最終的に一致します

m/pattern/ ../ \[after]/

pattern 1 [after] ABC
pattern 2 [after] 123 ABC DEX
pattern 3 [after] 
pattern 12345123 [after]
pattern @ASd#98 @_90sd [after] xyz dec

ただし、「[after]」の後に数字や文字を保持しないため、3番目または4番目のパターンは必要ありません。

ありがとう

4

3 に答える 3

2

これが私があなたの入力に対してテストするために使用したコードです(私はちょうどそれをキャットしてスクリプトにパイプしました)

#!/usr/bin/perl

while(<>)
{
    print if (/^pattern.*\[after\]\s*\S+/);
}

だからあなたのためにそれを分解するには:

/^pattern:「pattern」で始まる任意の文字列に一致します

.*\[after\]:任意の文字に一致し、その後に「[後]」が続く

\s*\S+:0個以上の空白文字とそれに続く1つ以上の非空白文字に一致する

これで、適切と思われるように調整するのに十分な作業ができます。

于 2012-08-27T22:06:29.887 に答える
1

コード:

$str = 'pattern 2 [after] 123 abc DEX';

if ($str =~ m/^pattern\s+(\d+)\s+\[after\]\s+(.+)/) {
  print "$1\t$2\n";
} else {
  print "(no match)\n";
}

出力:

2   123 abc DEX

ここでこのコードをテストします。

于 2012-08-27T19:14:59.193 に答える
0

これは、あなたの望むことですか:

/pattern [0-9] \[after\](?= .)/s

また

/pattern [0-9] \[after\] ./s
于 2012-08-27T19:02:39.507 に答える