有很多关于正则表达式匹配潜在空字符串,但我不能找到任何提供了正则表达式的只有匹配一个空字符串。什么是只匹配空字符串的正则表达式?
我知道^
将匹配任何行的开头,并且$
将匹配任何行的结尾以及字符串的结尾。因此,/^$/
比赛远远超过了空字符串,如“\ n”,“foobar的\ n \ n”等
我想到,虽然,/\A\Z/
将只匹配空字符串,因为\A
匹配字符串的开头,\Z
匹配字符串的结尾。但是,我的测试显示/\A\Z/
也将匹配“\ n”。这是为什么?
有很多关于正则表达式匹配潜在空字符串,但我不能找到任何提供了正则表达式的只有匹配一个空字符串。什么是只匹配空字符串的正则表达式?
我知道^
将匹配任何行的开头,并且$
将匹配任何行的结尾以及字符串的结尾。因此,/^$/
比赛远远超过了空字符串,如“\ n”,“foobar的\ n \ n”等
我想到,虽然,/\A\Z/
将只匹配空字符串,因为\A
匹配字符串的开头,\Z
匹配字符串的结尾。但是,我的测试显示/\A\Z/
也将匹配“\ n”。这是为什么?
正如http://www.regular-expressions.info/anchors.html中的“用换行符结束的字符串”一节中所述,\Z
通常会在以换行符结尾的字符串中的最后一个换行符结束之前匹配。如果您只想匹配字符串的末尾,则需要使用\z
。这条规则的例外是Python。
换句话说,要专门匹配空字符串,您需要使用/\A\z/
。
用re.match在Python 2.7.3中尝试了这个,看起来不起作用。 re.match(“/ \\ A \\ z /”,“”)返回None。 –
试看看这里: https://docs.python.org/2/library/re.html
我遇到了你,尽管有同样的问题。我只能建立一个只匹配空字符串和“\ n”的正则表达式。先尝试修剪/替换字符串中的换行符。
我用http://pythex.org/并尝试怪异的正则表达式这样的:
()
(?:)
^$
^(?:^\n){0}$
等。
答案可能是依赖于语言的,但既然你不提一个,这里是我刚刚想出了JS:
var a = ['1','','2','','3'].join('\n');
console.log(a.match(/^.{0}$/gm)); // ["", ""]
// the "." is for readability. it doesn't really matter
a.match(/^[you can put whatever the hell you want and this will also work just the same]{0}$/gm)
你也可以做a.match(/^(.{10,}|.{0})$/gm)
匹配空行或该符合标准。 (这就是我一直在寻找到这里就结束了。)
我知道,^将匹配任何行的开头和$将匹配任何行
年底这是唯一真正的如果你打开了多行标志,否则它只会匹配字符串的开始/结束。我假设你知道这一点,并暗示着这一点,但是想在这里为学习者注意它。
我相信Python是唯一广泛使用的语言,不支持\z
这种方式(还)。有Python bindings for Russ Cox/Google's super fast re2
C++ library可以“放入”作为替代捆绑re
。
对此有一个很好的讨论(与解决方法)在Perl Compatible Regular Expression (PCRE) in Python,这里SO。
python
Python 2.7.11 (default, Jan 16 2016, 01:14:05)
[GCC 4.2.1 Compatible FreeBSD Clang 3.4.1 on freebsd10
Type "help", "copyright", "credits" or "license" for more information.
>>> import re2 as re
>>>
>>> re.match(r'\A\z', "")
<re2.Match object at 0x805d97170>
@tchrist's answer值得一读。
基于最认可的答案,这里是另一种方式:
var result = !/[\d\D]/.test(string); //[\d\D] will match any character
有很多[SO帖](http://stackoverflow.com/questions/17618634/matching-an-empty-字符串与正则表达式)关于正则表达式匹配一个空字符串,所以匆匆一瞥似乎它可能是重复的。考虑更改标题以更具体地解决您忽略换行符的问题。 –
这是一个关于正则表达式的文章,它不会与空字符串匹配,并提供一组关于为什么的答案。我真的试过了,找不到一个关于正则表达式的帖子,它只匹配一个空字符串,更不用说处理那个和'\ z'和'\ Z'之间的区别了。我不想混乱了。如果你能找到一个问题,那么我会很乐意删除这个问题。这就是说,我在这个标题中只强调了这个词。 –