什么是只匹配空字符串的正则表达式?

Pet*_*vin 34 regex string

有很多关于正则表达式匹配可能空字符串的帖子,但我不能轻易找到任何提供匹配空字符串的正则表达式.

我知道这^将匹配任何行的开头,$并将匹配任何行的结尾以及字符串的结尾.因此,/^$/匹配远远超过空字符串,如"\n","foobar \n \n"等.

不过,我会想到/\A\Z/只匹配空字符串,因为\A匹配字符串的开头并\Z匹配字符串的结尾.但是,我的测试表明它/\A\Z/也会匹配"\n".这是为什么?

Boh*_*ian 34

我会对任何字符使用负向前看:

^(?![\s\S])
Run Code Online (Sandbox Code Playgroud)

这只能在输入完全为空时匹配,因为字符类将匹配任何char,包括任何各种换行符.

  • 如果您启用了DOTALL标志,那么@mbom就可以了,所以dot也匹配换行符,但这样它在任何地方都可以使用,即使标志不可用. (6认同)
  • @JonathanBenn 如果你正确执行它,这实际上*确实*有效。在 JavaScript 控制台中: `RegExp(/^(?![\s\S])/).test('') -> true` 和 `RegExp(/^(?![\s\S])/) .test('你好世界!') -> false` (4认同)
  • 难道你不能只用`.`而不是`[\ s\S]`? (3认同)
  • @Bohemian 你是对的!我今天刚刚学到了一些东西......根据 [Mozilla](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp),字符串表达式需要双反斜杠。我应该像你一样使用 `RegExp('^(?![\\s\\S])')` 或文字。 (2认同)

Pet*_*vin 6

正如http://www.regular-expressions.info/anchors.html "使用\Z换行符结束字符串"部分所述,通常会在换行符结尾的字符串中最后一个换行符结束之前匹配.如果您只想匹配字符串的结尾,则需要使用\z.此规则的例外是Python.

换句话说,要专门匹配空字符串,您需要使用/\A\z/.

  • 在 JavaScript 控制台 `RegExp(/\A\z/).test('')` 返回 `false` (2认同)

Jam*_*ser 5

哇,您会想得太多。如下所示。此外,C和golang使用的RE2方言无法理解许多答案。

^$
Run Code Online (Sandbox Code Playgroud)

  • 是的,我不同意这种说法。该语句仅在启用多行标志时才成立。 (4认同)
  • `r'^\Z'` 和 `r'\A\Z'` 仅匹配 **Python** 中的空字符串。`r'^$'` 匹配 `'\n'`:“默认情况下...`'$'` [匹配]仅在字符串末尾[以及换行符之前](https://docs. python.org/3/library/re.html#re.MULTILINE)(如果有)位于字符串末尾。” (2认同)

小智 5

^$ -- 接受空字符串的正则表达式。它不会匹配您提到的“/n”或“foobar/n”。您可以在https://www.regextester.com/1924上测试此正则表达式。

如果您有现有的正则表达式,请在正则表达式中使用 or(|) 来匹配空字符串。例如 /^[A-Za-z0-9&._ ]+$|^$/