我知道这是一个非常奇怪的目标但是对于我们的系统中的一个快速和脏的修复,我们确实需要不过滤任何输入并让腐败进入系统.
我现在的正则表达式是" \^.*
"
问题在于它与计划中的字符不匹配...但是对于一个匹配它确实有效.使它不起作用的字符串是^ @jj(基本上任何有^ ...的东西).
现在不匹配任何角色的最佳方法是什么?我正在考虑删除\
但只是这样做会将"不"变成"开始"......
JSB*_*ոգչ 66
^
除了字符类([]
)之外,字符并不意味着"不" .如果你想不匹配任何东西,你可以使用匹配任何东西的负向前瞻:(?!.*)
.
pol*_*nts 48
一个简单而廉价的正则表达式永远不会匹配任何东西就是匹配一些简单无法比拟的东西,例如:\b\B
.
这是根本不可能为这个正则表达式匹配,因为它是一个矛盾.
\B
是否定版本\b
.\B
在没有的每个位置匹配\b
.fat*_*oku 13
另一个非常好的支持和快速模式将无法匹配任何保证恒定时间的模式:
$unmatchable pattern
$anything goes here
等等
$
当然表明了行尾.没有任何角色可以追踪,$
因此不可能进行进一步的状态转换.另外一个优点是您的模式直观,自我描述和可读性!
太棒了;最可移植和最有效的正则表达式从不匹配任何东西是$-
(行尾后跟一个字符)
最可靠的解决方案是创建一个不可能的正则表达式。有许多不可能的正则表达式,但并非所有都那么好。
首先,您要避免“先行”解决方案,因为某些正则表达式引擎不支持它。
然后你想确保你的“不可能的正则表达式”是有效的,并且不会采取太多的计算步骤来匹配......什么都没有。
我发现它$-
具有恒定的计算时间( O(1) ),并且无论文本大小如何(https://regex101.com/r/yjcs1Z/3 ),都只需要两步即可计算。
$^
两者$.
都需要 36 步来计算 -> O(1)\b\B
在我的样本上需要 1507 步,并且随着字符串中字符数的增加而增加 -> O(n)如果您的正则表达式引擎接受它,则永远不匹配任何内容的最佳和最简单的正则表达式可能是:空的正则表达式
。