1

次のように reg_ex でパターンを照合しています

$Structure = 'C:N:X:A:V:T:J:N:G:T:N:N:C:J:N:C:A:J:N:.:';
preg_match_all('/(T:|G:|L:|D:).*?(G:|i:|X:|\.:)/', $Structure, $arr, PREG_SET_ORDER);

私が得る結果は

T:J:N:G: , T:N:N:C:J:N:C:A:J:N:.: 

一致の区切り記号 (G:|i:|X:|.:) が検索に含まれないようにクエリを変更するにはどうすればよいですか。ただし、次の検索で使用されます。つまり、結果は次のようになります。

T:J:N: , G:T:N:N:C:J:N:C:A:J:N: 

代わりは?

これは可能ですか?

ありがとう

4

2 に答える 2

2

はい、2 番目のキャプチャ グループに入力を消費させる代わりに、それを肯定的な先読みに変えます。

/(T:|G:|L:|D:).*?(?=(?:G:|i:|X:|\.:))/

ここで、区切り文字を一致させる (そして消費する) 代わりに、次のようにします。

(?=(?:G:|i:|X:|\.:))

デリミタが現在のポイントから前方に存在することを正規表現がアサートする必要があることを示します。つまり、正の先読みです。

これにより、次の結果が得られます。

"T:J:N:, G:T:N:N:C:J:N:C:A:J:N:"
于 2012-07-30T14:46:32.913 に答える
1

次の構文を使用して、先読みによって可能です。

(?=G:|i:|X:|\.:)

それは正規表現に一致する部分を消費しません。

ちなみに、区切り文字とは、正規表現を囲むスラッシュを意味し、キャプチャ グループを意味するものではありません。

于 2012-07-30T14:47:09.493 に答える