回答
取决于语言,但一般也有负的断言,你可以把像这样:
(?!red|green|blue)
(谢谢你的语法修正,上面是有效的Java和Perl,因人而异)
你的意思是'(?!red | green | blue)'。 –
@caskey,完整答案是我和你的组合。如果您想将它们合并在一起,我会删除我的。 –
这个答案会更有用,你解释一下。例如:什么“?”和“!”意思?为什么你需要捕获组? – Lii
如果你想确保字符串不是红色,绿色和蓝色,caskey的答案就是它。然而,通常想要的是确保线路中的任何地方不包含红色,绿色或蓝色。对于这一点,在负先行锚定的正则表达式与^
,包括.*
:
^(?!.*(red|green|blue))
此外,假设你想包含单词“引擎”,但行没有任何这些颜色:
^(?!.*(red|green|blue)).*engine
你可能会认为你可以在因素对.*
正则表达式的头部:
^.*(?!red|green|blue)engine # Does not work
但你可以不。你必须有.*
这两个实例才能工作。
@Russ谢谢你指出错误。我编辑了答案。我用一些括号固定了它,但是用'。*'多余的副本修复也很好。但是,我不相信尾随。*是必要的。 –
如果你只是想要一个匹配的布尔检查,尾随。*是不需要的。如果你真的想要完整的匹配文本,你确实需要它。另外...您的新解决方案非常干净。谢谢! – Russ
我有同样的问题,提出的解决方案几乎工作,但他们有一些问题。最后,我使用的正则表达式是:
^(?!red|green|blue).*
我在Javascript和.NET中测试它。 *(?!。* red | green | blue),否则它会使第一个元素的行为与其他元素不同(即“anotherred”不会与其他元素的行为不同(例如,“anotherred”不会与其他元素的行为有所不同)当“anothergreen”会匹配时)
您不需要负面预测。有工作示例:
/([\s\S]*?)(red|green|blue)/g
描述:
[\s\S]
- 从0匹配来自先前组?
到无限 - - 的任何字符*
匹配匹配尽可能少(red|green|blue)
- 匹配其中一个词g
- 重复模式
例子:
redwhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredwhiteredwhiteredwhiteredwhiteredwhiteredgreenbluewhiteredwhiteredwhiteredwhiteredwhiteredredgreenredgreenredgreenredgreenredgreenbluewhiteredbluewhiteredbluewhiteredbluewhiteredbluewhitered
将是:
whitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhite
测试:regex101.com
注意到1155个步骤,但如果有人能即兴我会很感激。
匹配任何东西,但给出的字符串
如果你想,你想匹配的一切,但某些字符串匹配整个字符串,你可以做这样的:
^(?!(red|green|blue)$).*$
此说,开始从字符串开始的匹配,它不能以红色,绿色或蓝色开始并以红色,绿色或蓝色结尾,并与字符串末尾的其他任何内容匹配。
你可以在这里尝试一下:https://regex101.com/r/rMbYHz/2
注意,这仅与正则表达式引擎支持negative lookahead工作。
- 1. 匹配除了给定字符串以外的所有内容
- 2. 匹配除特定字符串以外的所有内容
- 3. PHP preg_match:匹配除字符串之外的所有内容
- 4. 匹配所有不以指定字符串结尾的字符
- 5. 匹配除匹配(多字)模式以外的所有字符
- 6. PHP删除除字符串以外的所有内容
- 7. 匹配除指定正则表达式以外的所有内容
- 8. gsub()除指定字符外的所有内容?
- 9. 正则表达式匹配除前两个字符以外的所有内容
- 10. 正则表达式 - 匹配除特定字符串以外的任何内容
- 11. 删除Hightlight字符串内容匹配
- 12. 删除字符串中除数字之外的所有内容
- 13. 正则表达式匹配除“/”以外的所有内容
- 14. 正则表达式 - 如何匹配除特定字符串以外的所有内容?
- 15. 匹配除换行符,空格和制表符以外的所有内容
- 16. 除匹配值外,我如何匹配所有内容?
- 17. RegExp,匹配除字母外的所有内容
- 18. grep:匹配除字外的所有内容
- 19. 匹配除了文字,数字和空格以外的所有内容
- 20. Alias将除主页以外的所有内容匹配到“内容”文件夹
- 21. ANTLR3:匹配所有内容直到指定的关键字
- 22. 匹配除字词外的所有字
- 23. 如何匹配除逗号以外的所有特殊字符
- 24. 将所有字符替换为*除指定字符以外*
- 25. 正则表达式:匹配以外的所有字符串
- 26. 获取匹配字符串后的所有内容的最佳方式,包括匹配的字符串?
- 27. 正则表达式:匹配指定字符串之间的所有匹配项
- 28. 在字符串中匹配正则表达式并删除/删除所有不匹配的内容
- 29. Perl:除了空白字符串以外的所有字符串
- 30. 匹配任何位置中除字符串之外的所有字符
并非所有的正则表达式都可以做到这一点。你在哪个环境工作? Java的? Perl的? 。净?一些C/C++正则表达式库?一个RDBMS? – FrustratedWithFormsDesigner
你不会说你想要什么,但你可以简单地颠倒“匹配”操作的感觉。如果你尝试对不匹配的部分进行提取,但是为了测试一个被排除的字符串是否不存在,它会起作用:'if(!s.match(/ red | green | blue /)) ......注意:我知道OP没有指定什么语言/框架,所以前面的内容应该被认为是一个通用的例子,而不是一个规范性的例子。 – tvanfosson