我知道这是一个非常奇怪的目标但是对于我们的系统中的一个快速和脏的修复,我们确实需要不过滤任何输入并让腐败进入系统。
我目前的正则表达式是“\^.*
”
问题在于它与计划中的字符不匹配...但是对于一个匹配它确实有效。使它不起作用的字符串是^ @jj(基本上任何有^ ...的东西。)。
现在不匹配任何角色的最佳方式是什么?我正在考虑删除\
,但只有这样做才会将“不”转换为“开头”......
答案 0 :(得分:64)
除了字符类(^
)之外,[]
字符并不意味着“不”。如果您不想匹配任何内容,可以使用与任何内容匹配的否定前瞻:(?!.*)
。
答案 1 :(得分:48)
一个简单而廉价的正则表达式永远不会匹配任何东西,以匹配简单无法匹配的东西,例如:\b\B
。
根本不可能这个正则表达式匹配,因为这是一个矛盾。
\B
是\b
的否定版本。 \B
匹配\b
没有的每个位置。 答案 2 :(得分:12)
另一个非常受支持且快速的模式,无法匹配保证为恒定时间的任何内容:
$unmatchable pattern
$anything goes here
等。
$
当然表示行尾。 $
之后没有任何字符可能会出现,因此不可能进行进一步的状态转换。另外一个优点是您的模式直观,自我描述和可读性!
答案 3 :(得分:1)
为什么不匹配所有字符,而不是尝试不匹配任何字符? ^.*$
应该做到这一点。如果你不匹配任何字符,那么试试^\j$
(当然,假设你的正则表达式引擎在你提供一个无效的字符类时不会抛出错误。如果是,请尝试^()$
。使用RegexBuddy快速测试表明这可能有用。
答案 4 :(得分:0)
^只有当它在课堂上时才会出现(例如[^ a-z]意味着除了a-z之外的任何东西)。你用反斜杠把它变成了文字^。
你要做的是[^] *,但这不合法。你可以试试像
这样的东西" {10000}"
它恰好匹配10,000个空格,如果它比你的最大输入长,它永远不应该匹配。
答案 5 :(得分:0)
((?iLmsux))
试试这个,只有当字符串为空时才匹配。
答案 6 :(得分:0)
一个绝不匹配任何东西的最佳正则表达式是一个空正则表达式。但是我不确定所有的正则表达式引擎都会接受。
另一种解决方案是创建一个不可能的正则表达式。我发现$-^
仅需两个步骤即可计算,而与文本(https://regex101.com/r/yjcs1Z/1)的大小无关。
$^
和$.
采取了36个步骤来计算-> O(1)\b\B
在我的示例中执行了1507个步骤,并随着字符串中字符数的增加-> O(n)答案 7 :(得分:-1)
您希望根本不匹配?否定外观似乎很明显,但可能很慢,或许^$
(仅匹配空字符串)作为替代?
答案 8 :(得分:-2)
你试过这个简单的正则表达式吗? [^.]*
答案 9 :(得分:-2)
呃我知道这有点晚了,但如果正则表达式为空,你根本就不能读取任何输入