みたいな表現を見つけた
\((.*?)\)
(text)のような括弧付きの括弧内のテキストを見つけるのに適しています
と
^((?!.*(word1|word2|word3)).*)+
word4abcdのような特定の単語を含まず、たとえば word1 testを含まないテキストを検索する
それらをマージして、これらの単語を含まない括弧内のテキストを検索する方法 in (example)および not like (example word2) ?
前もって感謝します
最初の正規表現は、消極的な量指定子*?
を使用して、最初に利用可能な閉じ括弧が開き括弧の後に一致することを確認します。2 番目の正規表現は、ゼロ幅の負の先読みグループ ((?!...)
構造) を使用して、特定の単語の一致を防ぎます。これらのトリックを組み合わせるために、次のようなものを見ています。
\(((?!something).*?)\)
問題は、の代わりに何が入るかsomething
です。単にそこに置くだけ.*(word1|word2)
では機能しません。これも禁止word1
またはword2
括弧の外になります。.*
by に置き換えて.*?
も、それは変わりません。機能するのは、またはの後に続く[^)]*(word1|word2)
文字と等しくない任意の文字列に一致するものです。)
word1
word2
結果の式は次のとおりです。
\(((?![^)]*(word1|word2)).*?)\)
word1
orを含まないブラケット式に一致しますword2
。
多分これはあなたが望むものですか?
^\(((?!.*word1)(\S)*)|(\3)\)
一致: (wordwordexample) 不一致: (単語 wordexample) (word1wordexample)
質問はあまり明確ではありませんが、役立つ例を挙げています。
この正規表現を見てください:
/\((?!.*?\bexample\s+word\b[^)]*\)).*?\bexample\b.*?\)/
example
これは、角括弧内の単語に一致します。example word
角括弧内にno がない場合、一致が発生します。
\b
は単語境界に使用されているため、examples
代わりに一致しません。