我知道以下正则表达式将匹配"红色","绿色"或"蓝色".
red|green|blue
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法使它匹配除了几个指定字符串之外的所有内容?
Way*_*rad 135
如果你想确保字符串既不是红色,绿色也不是蓝色,那么caskey的答案就是它.然而,通常需要的是确保线条中的任何位置都不包含红色,绿色或蓝色.为此,将正则表达式锚定^并包含.*在否定前瞻中:
^(?!.*(red|green|blue))
Run Code Online (Sandbox Code Playgroud)
另外,假设您想要包含单词"engine"但没有任何颜色的行:
^(?!.*(red|green|blue)).*engine
Run Code Online (Sandbox Code Playgroud)
您可能认为可以.*将正则表达式的头部考虑在内:
^.*(?!red|green|blue)engine # Does not work
Run Code Online (Sandbox Code Playgroud)
但你不能.你必须有两个实例.*才能工作.
cas*_*key 41
取决于语言,但通常会有负面断言,如下所示:
(?!red|green|blue)
Run Code Online (Sandbox Code Playgroud)
(感谢语法修复,上面是有效的Java和Perl,YMMV)
Sam*_*Sam 26
如果你想匹配你想要匹配除了某些字符串之外的所有字符串的整个字符串,你可以这样做:
^(?!(red|green|blue)$).*$
这就是说,从字符串的开头开始匹配,它不能以红色,绿色或蓝色开始和结束,并匹配字符串末尾的任何其他内容.
你可以在这里试试:https://regex101.com/r/rMbYHz/2
请注意,这仅适用于支持负向前瞻的正则表达式引擎.
hlc*_*lcs 21
你不需要消极的前瞻.有工作的例子:
/([\s\S]*?)(red|green|blue)/g
Run Code Online (Sandbox Code Playgroud)
描述:
[\s\S] - 匹配任何角色* - 从前一组的0到无限制匹配? - 尽可能少地匹配(red|green|blue) - 匹配其中一个词g - 重复模式例:
redwhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredwhiteredwhiteredwhiteredwhiteredwhiteredgreenbluewhiteredwhiteredwhiteredwhiteredwhiteredredgreenredgreenredgreenredgreenredgreenbluewhiteredbluewhiteredbluewhiteredbluewhiteredbluewhitered
将会:
whitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhite
测试一下: regex101.com
采取1155步骤,但如果有人可以改善我会受到赞赏.
Dur*_*n81 11
我有同样的问题,提出的解决方案几乎可以工作,但他们有一些问题.最后我使用的正则表达式是:
^(?!red|green|blue).*
Run Code Online (Sandbox Code Playgroud)
我在Javascript和.NET中测试过它.
.*不应该放在负面的前瞻内部,如下所示:^(?!.*red | green | blue)或者它会使第一个元素的行为与其余元素不同(即"anotherred"不会匹配,而"另一个"会"
匹配任何文本,但那些匹配模式的文本通常是通过使用正则表达式模式拆分字符串来实现的。
例子:
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用作第二个参数,.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 演示。注意:如果您的模式包含捕获组,正则表达式拆分函数/方法的行为可能会有所不同,这也取决于其他选项。请参考相应的拆分方法文档。
| 归档时间: |
|
| 查看次数: |
167951 次 |
| 最近记录: |