18

私がやっている preg_match 正規表現と混同しているようですので、新鮮な目と助けをいただければ幸いです。

私の現在の正規表現は次のとおりです。

/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se

:(1,4) オプションなどの数値入力とコロンを作成しようとしているので、次のように一致します。

<!--menu:start--><!--menu:end-->

また

<!--menu:start:(0,3)--><!--menu:end-->
4

3 に答える 3

33

一致しないグループで囲み、それを optional に設定します。(?:...)?

/<!--menu:start(?::\(([0-9])\,([0-9])\))?-->(.*?)<!--menu:end-->/se
于 2009-06-22T09:14:20.477 に答える
29

このような:

/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se

オプションにしたい部分の周りに非キャプチャ グループ を追加し(?: )、末尾に疑問符を付けました。(?:<optional content>)?

于 2009-06-22T09:13:05.533 に答える
5

これは、オプションの非キャプチャ グループ -- (?: )?-- を使用して、オプションの部分を照合し、数字を照合する\d代わりに:[0-9]

/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se

括弧内の数字が複数の数字で構成される場合は、代わりに次の数字を使用します。

/<!--menu:start(?::\((\d+),(\d+)\))?-->(.*?)<!--menu:end-->/se
于 2009-06-22T09:34:44.883 に答える