1

次の正規表現を機能させる必要がありますが、問題があります。はい、HTML を解析しています。いいえ、使用するより良いオプションはありません。

これは正規表現です:

test(.*)\/[^s].*(=|\/|Z)

私は "U" 修飾子を使用しており (したがって貪欲ではありません)、"\" は私のエスケープ記号です。

このパターンを差し込む:

test.com/sch/anythingwhateverZhello

私がそうすべきではないと思うとき、結果は一致します。キャプチャは「.com/sch」と「Z」ですが、A) 最初の「/」までのみをキャプチャする必要があるため、「.com」にする必要があることを具体的に伝えましたが、B) 「/」の後の最初の文字が「s」の場合は一致しません。興味深いことに、私の問題の原因として考えられるのは、[^s] を削除すると、キャプチャが正しく機能するようになったことです。これを入れると、アスタリスクは 2 番目の「/」まで飲み込んでしまい、意味がありません。アスタリスクの後にクエスチョン マークを付けてみました。これは、貪欲であってはならないという正規表現への二重のヒントと同じですが、違いはありませんでした。

では、否定された文字クラスの代わりに (「s」だけを除外したくありません。具体的には「sch」を除外したいと思います)、次に否定先読みを試みました。

test(.*)\/(?!sch).*(=|\/|Z)

同じ問題!一致し、最初のキャプチャは「.com/sch」です。

私の失態がここにあるという考えはありますか?(私はhttp://www.rexv.org/で RexV2 正規表現バリデーターを使用していたので、そのエンジンにバグがあるかもしれないと思いましたが、私のライブ環境でこの問題を再現できます)。

4

1 に答える 1

0

test(.*)それはあなたの問題です。多分それはテスト([^/]*)である必要がありますか?

このままでは、は任意の文字を意味するtest.com/schため、に一致し、次にinがないため、続行されます。./sanythingwhateverZhello

于 2013-02-28T20:21:06.147 に答える