1

長い正規表現パターンで、次々と一致するグループがいくつかあります。私が持っている真ん中あたり

...(?<number>(?:/(?:digit|num))?\d+|)...

/num9/digit9またはまたは空白のようなものと一致する9必要があります(名前付きグループが空であっても、結果の連想配列に表示される必要があるため)。

/パターンは機能しますが、最初の 2 つのケースのいずれかが一致した場合、文字を破棄することは可能ですか? 肯定先読みをしてみましたが、先読みの前に式があると使えないようです。

正規表現を使用して達成しようとしていることは可能ですか?

4

1 に答える 1

3

/あなたの入力に基づいて、とにかくある時点でキャプチャする必要があると思います。そうしないと、正規表現全体が失敗します。同時に、それを無視したいので、名前付きグループの一部にすることはできません。したがって、それを外側に置いてオプションにすることで、数字の前に a が直接/来ないようにすることで、目的の結果が得られます。

^/?(?<number>(?:(?:digit|num))?(?<!/)\d+|)$

ただし、より完全な入力と正規表現がないことを考えると、これがすべてのケースで機能することを 100% 確信しているわけではありません。

于 2012-08-15T21:15:43.837 に答える