什么是仅匹配空字符串的正则表达式? 您所在的位置:网站首页 正则空字符串怎么表示 什么是仅匹配空字符串的正则表达式?

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

2023-07-08 21:35| 来源: 网络整理| 查看: 265

关于正则表达式的文章很多,以匹配可能为空的字符串,但是我找不到任何提供正则表达式的匹配空字符串的文章。

我知道^将匹配任何行的开头,而$将匹配任何行的结尾以及字符串的结尾。 因此,/^$/匹配的内容远远超过空字符串,例如" n"," foobar n n"等。

但是,我会认为/\A\Z/只匹配空字符串,因为\A匹配字符串的开头,而\Z匹配字符串的结尾。 但是,我的测试表明/\A\Z/也将匹配" n"。 这是为什么?

相关讨论 关于正则表达式的许多SO帖子都匹配一个空字符串,因此粗略地看一看,似乎是重复的。 考虑更改标题以更具体地解决忽略换行符的问题。 那是关于正则表达式的帖子,它与空字符串不匹配,并带有一组答案。 我确实尝试过并且找不到关于正则表达式的帖子,该帖子仅匹配一个空字符串,更不用说处理该字符串以及\z和\z之间的区别了。 我不想那么混乱。 如果您发现这是一个重复的问题,我很乐意将其删除。 就是说,我仅在此标题中加重了该词。 删除多行标志,^ $应该起作用 @JamRisser我了解与多行模式的交互。 我本来应该很明确,但是我想问一个正则表达式在多行模式下只匹配一个空字符串。 请特别注意最后一段。

对于任何字符,我都会使用否定的前瞻:

1^(?![\s\S])

仅当输入完全为空时才能匹配,因为字符类将匹配任何字符,包括各种换行符。

相关讨论 您不能只使用.而不是[\s\S]吗? 如果启用了DOTALL标志,则可以使用@mbom,因此点也与换行符匹配,但是即使标志arent可用,它也可以在所有地方使用。 这实际上不起作用,因为它匹配所有内容,例如在JavaScript命令行RegExp(^(?![\s\S])).test(Hello World!)返回true @JonathanBenn如果正确执行,它实际上可以工作。在JavaScript控制台中:RegExp(^(?![\s\S])).test() -> true和RegExp(^(?![\s\S])).test(Hello World!) -> false @波希米亚你是对的!我今天刚刚学到了一些东西...根据Mozilla,字符串表达式需要双反斜杠。我应该像您一样使用RegExp(^(?![\\s\\S]))或文字。

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

1^$ 相关讨论 您是否不同意包含在问题中的语句:"因此,/ ^ $ /匹配的内容远远超过空字符串,例如" n"," foobar n n"等。" 是的,我不同意那句话。仅当启用多行标志时,该语句才为真。 而且,确保禁用全局标志可能不会有任何伤害,因为不可能有多个空实例。 有趣,我对用例感到好奇 r^\Z和r\A\Z仅匹配Python中的空字符串。 r^$匹配 :"默认情况下... $ [仅在字符串的末尾并且在字符串末尾的换行符之前(如果有)[仅匹配]]。 这实际上是正确的答案。在JavaScript控制台上,RegExp(^$).test( )是false,RegExp(^$).test()是true。原始海报的多行标记必须设置为true。即RegExp(^$,m).test( )等于true

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

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

相关讨论 在Python 2.7.3中使用re.match对其进行了尝试,但似乎不起作用。 re.match(" / \ A \ z /",")返回None。 在JavaScript控制台RegExp(\A\z).test()返回false

我相信Python是唯一不以这种方式支持\Z的语言(至今)。 Russ Cox / Google的超快速re2 C ++库具有Python绑定,可以"放入"作为捆绑的re的替代品。

在Python上的Perl兼容正则表达式(PCRE)上,有一个很好的讨论(包含变通方法),在此处。

12345678python 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',"")

@tchrist的答案值得一读。

答案可能取决于语言,但是由于您没有提及,因此这是我在js中想到的:

1234567 var a = ['1','','2','','3'].join(' ');  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)来匹配空行或符合条件的行。 (这就是我想要在这里结束的内容。)

I know that ^ will match the beginning of any line and $ will match the end of any line

仅当启用了多行标志时,才这样,否则它将仅与字符串的开头/结尾匹配。我假设您知道这一点并暗示了这一点,但想在此为学习者注意。

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

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

试试看这里: https://docs.python.org/2/library/re.html

我遇到了与您相同的问题。我只能建立一个仅与空字符串和" n"匹配的正则表达式。首先尝试用其他字符修剪/替换字符串中的换行符。

我正在使用http://pythex.org/并尝试如下奇怪的正则表达式:

()

(?:)

^$

^(?:^ ){0}$

等等。

根据最认可的答案,这是另一种方法:

1var result = !/[\d\D]/.test(string);  //[\d\D] will match any character 相关讨论 那不是正则表达式。多数民众赞成在正则表达式与JavaScript混合。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有