Regex 与';匹配的正则表达式';
可能重复:Regex 与';匹配的正则表达式';,regex,Regex,可能重复: 我试图弄清楚如何解析出括号内的文本,但在语句中的单引号之间。例如,如果我有以下陈述: (I have a 'cat', 'hat'); 我希望结果是 cat hat 我尝试了维基百科()中定义的不同元字符,终于找到了答案,但我仍然很难理解它为什么有效 我试过:\'(.*)\' 我对这个正则表达式的理解是:我想得到单引号“之间的字符,并且这些字符匹配任何单个字符零次或多次* 这导致: cat', 'hat cat hat 在玩了一堆正则表达式之后,我最终意外地得到了这样一个结
我试图弄清楚如何解析出括号内的文本,但在语句中的单引号之间。例如,如果我有以下陈述:
(I have a 'cat', 'hat');
我希望结果是
cat
hat
我尝试了维基百科()中定义的不同元字符,终于找到了答案,但我仍然很难理解它为什么有效
我试过:\'(.*)\'
我对这个正则表达式的理解是:我想得到单引号“
之间的字符,并且这些字符匹配任何单个字符
零次或多次*
这导致:
cat', 'hat
cat
hat
在玩了一堆正则表达式之后,我最终意外地得到了这样一个结果:\'(.*)\
这导致:
cat', 'hat
cat
hat
为什么这样做有效?(特别是我不明白“?”是如何工作的。)什么时候*后面跟着?这将使*在惰性模式下匹配。默认情况下,它是贪婪的:尽可能多地吸收匹配的字符。在惰性模式下,它会尽可能早地继续模式的其余部分
一开始就搞错了。现在更正。什么时候*后跟?这将使*在惰性模式下匹配。默认情况下,它是贪婪的:尽可能多地吸收匹配的字符。在惰性模式下,它会尽可能早地继续模式的其余部分
一开始就搞错了。现在更正。默认情况下,正则表达式是贪婪的。通过使用问号,您正在将匹配更改为“惰性”模式。这意味着它匹配尽可能少的字符数。默认情况下,正则表达式是贪婪的。通过使用问号,您正在将匹配更改为“惰性”模式。这意味着它匹配尽可能少的字符数。这是因为 ()是对您的结果进行分组(这是您希望作为返回得到的结果) 与一切匹配 *让匹配出现0次或更多次 ?是可选的,因此,ab?将使用案例a或ab 最后,
(.*?
将匹配所有内容,但只匹配一次(?
工作)或匹配所有内容0次或多次(*
工作)。这是因为
()是对您的结果进行分组(这是您希望作为返回得到的结果)
与一切匹配
*让匹配出现0次或更多次
?是可选的,因此,ab?将使用案例a或ab
最后,
(.*?
将匹配所有内容,但只匹配一次(?
工作)或所有内容0次或多次(*
工作)。正则表达式的默认行为使字符串中的尽可能长的匹配。这被称为“贪婪”
正确的说法是,?
通常只意味着匹配前面的项(例如,字符)一次或多次,但*?
是一种称为“惰性星”的特例,它将正则表达式计算器切换到“惰性”模式。在这种模式下,计算器首先尝试跳过前面的项目(并在没有它的情况下完成匹配),然后再“返回”它
最终结果正如您所观察到的:它将匹配满足搜索条件的较短字符串,而不是(默认值),从而只找到可能最长的匹配
测试正则表达式的一个方便资源是,对各种选项(包括懒星)的一个很好的描述是。正则表达式的默认行为,使字符串中的尽可能长的匹配。这被称为“贪婪” 正确的说法是,
?
通常只意味着匹配前面的项(例如,字符)一次或多次,但*?
是一种称为“惰性星”的特例,它将正则表达式计算器切换到“惰性”模式。在这种模式下,计算器首先尝试跳过前面的项目(并在没有它的情况下完成匹配),然后再“返回”它
最终结果正如您所观察到的:它将匹配满足搜索条件的较短字符串,而不是(默认值),从而只找到可能最长的匹配
测试正则表达式的一个方便资源是,对各种选项(包括lazy star)的一个很好的描述是。相反。添加?使它懒惰。接近,但实际上相反。相反。添加?使它懒惰。接近,但实际上相反,特别是“懒惰而不是贪婪”部分,特别是“懒惰而不是贪婪”部分需要注意的是,并非所有正则表达式方言都支持懒惰量词;特别是,POSIX和GNU(无论是基本形式还是扩展形式)或XML模式正则表达式都不支持它,需要注意的是,并非所有正则表达式方言都支持惰性量词;特别是,POSIX和GNU(既不是基本形式,也不是扩展形式)和XML模式正则表达式都不支持它