PCRE正则表达式匹配空字符吗?

问题描述:

我有一个文本来源与它的空值,我需要把它们一起与我的正则表达式模式。甚至可以匹配空字符的正则表达式?PCRE正则表达式匹配空字符吗?

我只有当我的图案拒绝匹配时才意识到它,当我将它粘贴到Notepad ++中时,它显示了所有的空字符。

\x00 

这是一个空字符。

+0

谢谢。虽然效果很好,但却无法让我的任何'视觉'工具与null协同工作,但Regex Buddy的Grep将在幕后做到这一点。 – Keng 2010-04-06 12:25:32

+0

看起来像['\ x0' should work](http://superuser.com/a/287998/2259)。 – l0b0 2012-04-11 13:09:28

+0

除非这是你唯一匹配的东西,否则不应该使用'\ x0'。如果你想匹配'\ x0apple'这将试图匹配'\ npple' – Augwa 2017-07-14 20:01:37

匹配空字符的一个问题是,您首先需要安排它到达。很多语言使用以空字符结尾的字符串,因此您的匹配可能不是针对整个输入。

至于如何表达它PCRE,\ 000工程,是不会被任何东西得到绊倒了跟随它,因为会\ X {}(但八进制的版本是在我看来,更容易走过场时识别正则表达式)。

请参阅the PCRE manpages并搜索非打印字符了解如何以各种不同方式指定null的完整详细信息。

+0

当前地址http://www.pcre.org/original /doc/html/pcrepattern.html#SEC5 – test30 2015-01-15 21:03:06

要澄清/添加另一个细节到以前的答案:PCRE库接受模式作为一个“C”nul终止的字符串。 (引用PCRE文档:“模式是一个由二进制零终止的C字符串”)。这意味着该模式不能包含字面NUL字符 - 相反,它必须总是使用其他答案中描述的方法进行转义。 (“与模式字符串不同,主题可能包含 二进制零。”“4.尽管在主题字符串中支持二进制零字符,但它们不允许在模式字符串中使用,因为它作为正确的C传递串,由零终止\ 0可以在 图案中使用的转义序列来表示二进制的0“)

NUL字符是PCRE图案的唯一字符必须被转义,所有其它可能去文字。: “除了 终止模式的二进制零之外,对非打印字符的外观没有限制”。

作为最后的比较说明,其他一些与Perl兼容的正则表达式引擎确实允许模式中的文字NUL,例如Python的SRE。例如。 Python3的urlib.parse有以下行:_asciire = re.compile('([\x00-\x7f]+)')。请注意缺少用于表示原始文字的“r” - 这意味着,在这里进行的转义发生在Python级别上,并且re模块获取模式中值为0x00和0x7f的字符。