回答:
先読みアサーションを使用できます。
(?!999)\d{3}
この例は、以外の3桁と一致し999
ます。
ただし、この機能を使用して正規表現を実装していない場合(「正規表現フレーバーの比較」を参照)、基本的な機能を備えた正規表現を自分で作成する必要があります。
基本的な構文のみと互換性のある正規表現は次のとおりです。
[0-8]\d\d|\d[0-8]\d|\d\d[0-8]
これは、3桁でないシーケンスにも一致します999
。
文字列内の単語Aに一致し、単語Bには一致しない場合。例:テキストがある場合:
1. I have a two pets - dog and a cat
2. I have a pet - dog
ペットのための犬がいて、猫がいないテキスト行を検索する場合は、次の正規表現を使用できます。
^(?=.*?\bdog\b)((?!cat).)*$
2行目のみが見つかります。
2. I have a pet - dog
パターンと照合し、ホスト言語を使用して、照合のブール結果を反転します。これにより、読みやすく、保守しやすくなります。
言及されていない簡単な解決策があったため、この古代の問題を復活させません。(正規表現バウンティクエストの調査中に質問が見つかりました。)
(Aおよび〜B)パターンに一致する必要がある状況に直面しています。
このための基本的な正規表現は、驚くほど単純です。 B|(A)
全体的な一致を無視して、Aを含むグループ1のキャプチャを調べます。
例(正規表現でのhtmlの解析に関するすべての免責事項を含む):Aは数字、Bは数字 <a tag
正規表現: <a.*?<\/a>|(\d+)
デモ(右下のペインのグループ1を見てください)
参照
\d
し[[:digit:]]
ます。最初のリファレンスは、それがPerlとPHPに固有であると述べています:「PerlとPHPに固有の構文を使用して、同じことを行うバリエーションがあります。」
通常の言語を補完するものも通常の言語ですが、それを構築するには、通常の言語用のDFAを構築し、有効な状態の変更をすべてエラーにする必要があります。例については、こちらをご覧ください。ページが言っていないことは、それがに変換さ/(ac|bd)/
れたこと/(a[^c]?|b[^d]?|[^ab])/
です。DFAから正規表現への変換は簡単ではありません。以前に提案したように、正規表現を変更せずに使用し、コードのセマンティクスを変更できると、より簡単です。
ここで私の答えはあなたの問題も解決するかもしれません:
https://stackoverflow.com/a/27967674/543814
$1
を読みます$2
。$2
はそこでキャプチャされないようになりましたが、これは回避します。例:
Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");
最初のキャプチャグループは、回避するパターンを指定します。最後のキャプチャグループは他のすべてをキャプチャします。単にそのグループを読んでください$2
。
findstr
ここではすべての回答がタグに対して有効ではないため、タグを削除しました。