是否可以构造一个拒绝所有输入字符串的正则表达式?
11 回答
大概是这样的:
[^\w\W]
\w - 单词字符(字母、数字等)
\W - 与 \w 相反
[^\w\W] - 应该总是失败,因为任何字符都应该属于字符类之一 - \w 或 \W
另一个片段:
$.^
$ - 断言在字符串末尾的
位置 ^ - 断言在行首的位置
。- 任何字符
(?#it's just a comment inside of empty regex)
空的前瞻/后视应该可以工作:
(?<!)
拒绝所有输入的最佳标准正则表达式(即无前瞻或后向引用)是(在上面的@aku 之后)
.^
和
$.
这些是明显的矛盾:“一个字符串在其开头之前有一个字符”和“一个字符串在其结尾之后有一个字符”。
注意:某些正则表达式实现可能会将这些模式拒绝为格式错误(很容易检查^
模式的开头和$
结尾......使用正则表达式),但我检查过的少数接受他们。^
这些在允许和$
匹配换行符的实现中也不起作用。
(?=not)possible
?= 是一个积极的前瞻。并非所有 regexp 风格都支持它们,但在许多风格中都支持它们。
该表达式将查找“not”,然后从同一位置开始查找“possible”(因为前瞻不会在字符串中向前移动)。
为什么可能需要这种事情的一个例子是,当您想使用正则表达式过滤某些输入并将正则表达式作为参数传递给函数时。
本着函数式编程的精神,为了代数完整性,您可能需要一些琐碎的主要正则表达式,例如“允许一切”和“不允许一切”。
为什么你甚至想要那个?一个简单的 if 语句就不能解决问题吗?类似于以下内容:
if ( inputString != "" )
doSomething ()
对我来说,这听起来像是您以错误的方式解决问题,您到底想解决什么?
您可以做一个正则表达式来捕获所有内容并否定结果。
例如在javascript中:
if (! str.match( /./ ))
但是你可以这样做
if (!foo)
相反,正如@[jan-hani] 所说。
如果您希望在另一个正则表达式中嵌入这样的正则表达式,您可能正在寻找$或^,或者使用提到的@[henrik-n] 之类的前瞻。
但正如我所说,这看起来像是一个“我认为我需要 x,但我真正需要的是 y”的问题。
[^\x00-\xFF]
这取决于您所说的“正则表达式”是什么意思。您是指特定编程语言或库中的正则表达式吗?在这种情况下,答案可能是肯定的,您可以参考上述任何回复。
如果您指的是计算机科学课程中教授的正则表达式,那么答案是否定的。每个正则表达式都匹配某个字符串。它可能是空字符串,但它总是匹配something。
无论如何,我建议您编辑问题的标题以缩小您所指的正则表达式的范围。
[^]+
应该这样做。
为了回答 aku 对此的评论,我使用在线正则表达式测试器 ( http://www.regextester.com/ ) 对其进行了测试,因此假设它适用于 JavaScript。我不得不承认没有在“真实”代码中对其进行测试。;)
编辑:[^\n\r\w\s]
好,
我不确定我是否理解,因为我一直想用正则表达式来匹配字符串。我想说你最好的方法是不使用正则表达式。
但是,您也可以使用匹配空行^$
的正则表达式或不匹配单词/空格的正则表达式[^\w\s]
...
希望能帮助到你!