正则expression式语法为“无匹配”?
我有一个Python模板引擎,大量使用正则expression式。 它使用如下的连接:
re.compile( regexp1 + "|" + regexp2 + "*|" + regexp3 + "+" )
我可以修改个别的子string(regexp1,regexp2等)。
有什么没有匹配的小而轻的expression式,我可以在一个模板里面使用,我不想要任何匹配? 不幸的是,有时'+'或'*'被附加到正则expression式primefaces,所以我不能使用空string – 一个“没有重复”的错误会上升。
这不应该匹配任何东西:
re.compile('$^')
所以如果你用'$ ^'来replaceregexp1,regexp2和regexp3,将不可能find一个匹配。 除非你使用多线模式。
经过一些testing,我发现了一个更好的解
re.compile('a^')
这是不可能匹配,并会比以前的解决scheme更早失败。 你可以用任何其他angular色来replace,而且总是不可能匹配
(?!)
应该总是无法匹配。 这是零宽度的负面预测。 如果括号中的内容匹配,则整个匹配失败。 鉴于它没有任何内容,它将无法匹配任何东西(包括任何东西)。
要匹配一个空string – 即使在多行模式下 – 您可以使用\A\Z
,所以:
re.compile('\A\Z|\A\Z*|\A\Z+')
不同的是\A
和\Z
是string的开始和结束,而^
和$
这些可以匹配行的开始/结束,所以$^|$^*|$^+
可能会匹配包含换行符的string标志被启用)。
如果不能匹配任何内容(甚至是空string),只需在string开头之前尝试查找内容,例如:
re.compile('.\A|.\A*|.\A+')
由于没有字符可以在\ A(根据定义)之前出现,所以总是无法匹配。
也许'.{0}'
?
"()"
什么都不匹配
你可以使用
\z..
这是string的绝对结束,其次是两个任何东西
如果加上+
或*
,那么这个方法仍然可以拒绝任何匹配
或者,使用一些列表理解去除无用的正则expression式条目并join到一起。 就像是:
re.compile('|'.join([x for x in [regexp1, regexp2, ...] if x != None]))
请确保在该行代码旁边添加一些注释,尽pipe:-)
- 相当于PHP的preg_replace的JavaScript
- Javascript的正则expression式:如何把正则expression式中的variables?
- 什么正则expression式会捕获从标记到行结束的所有内容?
- 使用sed和grep来search和replace
- shell脚本中“=〜”运算符的含义
- RegExparsing或validationBase64数据
- 使用Java来使用正则expression式查找较大string的子string
- 包含至less8个字符,1个数字,1个大写和1个小写字母的javascript正则expression式
- 在css中使用正则expression式?