2

コンテンツに表示されるコンテンツ プレースホルダーがいくつかあり、常に次の形式になっています。

[page_x] 

x は整数です。

私がやりたいのは、そのパターンに一致するすべてのプレースホルダーを取得して、それらを反復処理できるようにすることです。

私は正規表現の初心者です(学習しようとしています)ので、この時点で私が持っているのは次のとおりです。

preg_match_all("/[page_(*)]/", $content, $matches)

動作しないため、これは明らかに間違っています。たとえば、[page_1] を含む $content は、$matches の空の配列を提供します。

どんな助けや指針も大歓迎です。

4

1 に答える 1

9

角括弧は、正規表現では特別な意味を持ちます。あなたはそれを逃れる必要があります。また、*それ自体は無意味です。

zero or more of preceeding characterこれは、前の文字が必要であることを意味する修飾子です。.ここに追加したものは、何にでも一致します

最後に、オーバーマッチを防ぐために?、グループ マッチを非貪欲にするために追加する必要があります

preg_match_all('/\[page_(.*?)\]/', $content, $matches)

常に数字 (つまり、page_1、page_2、page_3) を一致させる場合は、より良い正規表現が

preg_match_all("/\[page_(\d+)\]/", $content, $matches)

\d+は 1 桁以上を意味します

于 2013-05-09T09:02:11.817 に答える