0

次の正規表現があります。

/^(\d{1,11})((?:(?:c?o|co?).*)?.*)$/i

次のような文字列に一致します。

125******* or 125co****** or 125CO*******

次で始まる部分文字列を除外したいと思います。

125af***** or 125AF****** or 125f****** or 125AF********

前もって感謝します

4

1 に答える 1

2

これを試して

^(?>\d{1,11})(?!af|a|f)((?:(?:c?o|co?).*)?.*)$

ここで正規表現を参照してください

正規表現に 2 つの変更を加えました。

  1. 先頭に を追加して、最初のグループをアトミック( ) にしました。これは、すでに一致した数字へのバックトラックを避けるためです。(?>\d{1,11})?>

  2. af、a、または f の後に続くものがないことを確認するために、否定的な先読み を追加しました。(?!af|a|f)これが機能するためには、最初のグループをアトミックにする必要があります。これにより、最後の桁を実際に処理できるようになります。(それ以外の場合はバックトラックし、最後の桁の前を見て、すべて問題ないと判断し、残りの文字列を最後の と一致させます.*)

于 2012-07-10T10:55:40.960 に答える