0

これは、PHP 固有の質問というよりも、一般的な正規表現に関する質問です。

次のようなさまざまな文字列が与えられます。

A/B/PA ID U/C/D

そして、次を使用して、スペース (「/PA ID U」) を含む中央のスラッシュのセグメントを抽出しようとしています。

preg_match('/(\/PA .+)(\/.+|$)/', $string, $matches);

しかし、期待していた「/PA ID U」ではなく、「/PA ID U/C/D」を取得していました。

最後のグループの「$」よりも「/.+」の一致を優先させるにはどうすればよいですか?


その他の注意事項:

文字列が大きく異なるため、最後のグループが別の「/somethingsomething」または「」のいずれかに一致する必要があります。「/.+」のみを照合すると、「A/B/PA ID U」のように「/PA ID U」が行末にあると取得できません。

基本的に、次のように特定のセグメントを抽出できる必要があります。

与えられた: "A/B/PA ID U/PA ID U/C/D"

エキス: (A), (B), (PA ID U), (PA ID U), (C), (D)


[アップデート]

split()orの使用を避けようとしてexplode()います。これは、「PA ID U」パターンを個別に一致させる必要があることを意味するためです。スラッシュで区切られたセグメントを抽出するだけでなく、部分文字列が特定のパターンと一致することを検証する必要があります。

4

4 に答える 4

2

スプリットを最も効果的に使用して、目的を達成できると思います。

split('/',$string);

参照:phpマニュアル

于 2009-02-19T07:07:32.937 に答える
1

.+が貪欲であるため、正規表現が機能していません。欲張りでない修飾子(a ?)を最初の修飾子に追加することで、これを修正できます.+

preg_match('/(\/PA .+?)(\/.+|$)/', '', $matches);

または、次のことを行うこともできます。

'/\/(PA [^\/]+)(\/.+|$)/'

スラッシュをキャプチャしないように、スラッシュをパレンの外に移動しました(スラッシュに興味がないと思います)。は[^\/]+、次のスラッシュまでのすべてのキャラクターをキャプチャします。

于 2009-02-19T07:25:06.763 に答える
0

ネクラミレス、

(\w+\s?)+

動作するはずです

于 2009-02-19T07:11:25.657 に答える