次の正規表現が「赤」、「緑」、または「青」に一致することを知っています。
red|green|blue
指定されたいくつかの文字列を除くすべてに一致させる簡単な方法はありますか?
if (!s.match(/red|green|blue/)) ...
します。上記は、規範的な例ではなく、一般的な例と見なしてください。
次の正規表現が「赤」、「緑」、または「青」に一致することを知っています。
red|green|blue
指定されたいくつかの文字列を除くすべてに一致させる簡単な方法はありますか?
if (!s.match(/red|green|blue/)) ...
します。上記は、規範的な例ではなく、一般的な例と見なしてください。
回答:
文字列が赤でも緑でも青でもないことを確認したい場合、caskeyの答えはそれです。しかし、しばしば望まれるのは、ラインのどこにも赤、緑、青が含まれていないことを確認することです。そのためには、正規表現をアンカーし、否定先読みに^
含めます.*
。
^(?!.*(red|green|blue))
また、「engine」という単語が含まれているが、これらの色は含まれていない行が必要だとします。
^(?!.*(red|green|blue)).*engine
.*
正規表現の先頭に因数分解できると思うかもしれません:
^.*(?!red|green|blue)engine # Does not work
できません。それが機能するには、の両方のインスタンスが.*
必要です。
言語に依存しますが、一般的にそうすることができる否定的なアサーションがあります:
(?!red|green|blue)
(構文修正のおかげで、上記は有効なJavaおよびPerl、YMMVです)
特定の文字列以外のすべてに一致させたい場所で文字列全体に一致させたい場合は、次のように実行できます。
^(?!(red|green|blue)$).*$
これは、赤、緑、青で開始および終了できない文字列の先頭から一致を開始し、それ以外の文字列の末尾に一致することを示しています。
ここで試すことができます:https : //regex101.com/r/rMbYHz/2
これは、否定先読みをサポートする正規表現エンジンでのみ機能することに注意してください。
否定的な先読みは必要ありません。実際の例があります:
/([\s\S]*?)(red|green|blue|)/g
説明:
[\s\S]
-任意の文字と一致します*
-0から前のグループの無制限に一致?
-できるだけ一致しない(red|green|blue|)
-この単語のいずれかに一致するか、何も一致しないg
-繰り返しパターン例:
whiteredwhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredwhiteredwhiteredwhiteredwhiteredwhiteredgreenbluewhiteredwhiteredwhiteredwhiteredwhiteredredgreenredgreenredgreenredgreenredgreenbluewhiteredbluewhiteredbluewhiteredbluewhiteredbluewhiteredwhite
になります:
whitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhite
試して: regex101.com
任意のテキストに一致するが、パターンに一致するものは通常、正規表現パターンで文字列を分割することで実現されます。
例:
Regex.Split(text, @"red|green|blue")
または、空の値を取り除くにはRegex.Split(text, @"red|green|blue").Where(x => !string.IsNullOrEmpty(x))
(デモを参照)Regex.Split(text, "red|green|blue")
または、空のアイテムを削除するにはRegex.Split(text, "red|green|blue").Where(Function(s) Not String.IsNullOrWhitespace(s))
(デモ、またはLINQがサポートされているこのデモを参照)text.split(/red|green|blue/)
(g
ここで修飾子を使用する必要はありません!)(空の値を取り除くには、を使用text.split(/red|green|blue/).filter(Boolean)
)、デモを参照text.split("red|green|blue")
、または-すべての後続の空の項目を保持するにtext.split("red|green|blue", -1)
は-を使用するか、またはすべての空の項目を削除するには、より多くのコードを使用してそれらを削除します(デモを参照)text.split(/red|green|blue/)
すべての後続項目の使用を取得text.split(/red|green|blue/, -1)
し、すべての空の項目の使用を削除しますtext.split(/red|green|blue/).findAll {it != ""})
(デモを参照)text.split(Regex("red|green|blue"))
または、空白のアイテムを削除するtext.split(Regex("red|green|blue")).filter{ !it.isBlank() }
には、を使用して、デモを参照してくださいtext.split("red|green|blue")
、または後続のすべての空のアイテムを保持するには、を使用text.split("red|green|blue", -1)
し、すべての空のアイテムを削除するには、を使用しますtext.split("red|green|blue").filter(_.nonEmpty)
(デモを参照)text.split(/red|green|blue/)
、空の値を取り除くには.split(/red|green|blue/).reject(&:empty?)
(および先頭と末尾の両方の空の項目を取得するに-1
は、2番目の引数として使用します.split(/red|green|blue/, -1)
)(デモを参照)my @result1 = split /red|green|blue/, $text;
、またはすべての末尾に空のアイテムがあるmy @result2 = split /red|green|blue/, $text, -1;
、または空のアイテムがないmy @result3 = grep { /\S/ } split /red|green|blue/, $text;
(デモを参照)preg_split('~red|green|blue~', $text)
またはpreg_split('~red|green|blue~', $text, -1, PREG_SPLIT_NO_EMPTY)
空のアイテムを出力しません(デモを参照)re.split(r'red|green|blue', text)
または、空のアイテムを削除するにはlist(filter(None, re.split(r'red|green|blue', text)))
(デモを参照)regexp.MustCompile("red|green|blue").Split(text, -1)
使用します。空のアイテムを削除する必要がある場合は、このコードを使用します。Goデモを参照してください。注:パターンにキャプチャグループが含まれている場合、正規表現の分割関数/メソッドは、追加のオプションによっても動作が異なる場合があります。その場合は、適切な分割方法のドキュメントを参照してください。
var href = '(text-1) (red) (text-3) (text-4) (text-5)';
var test = href.replace(/\((\b(?!red\b)[\s\S]*?)\)/g, testF);
function testF(match, p1, p2, offset, str_full) {
p1 = "-"+p1+"-";
return p1;
}
console.log(test);
var href = '(text-1) (frede) (text-3) (text-4) (text-5)';
var test = href.replace(/\(([\s\S]*?)\)/g, testF);
function testF(match, p1, p2, offset, str_full) {
p1 = p1.replace(/red/g, '');
p1 = "-"+p1+"-";
return p1;
}
console.log(test);