gpt4 book ai didi

regex - 正则表达式 。*?和 。*

转载 作者:行者123 更新时间:2023-12-04 00:10:33 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What is the difference between .*? and .* regular expressions?

(3 个回答)


5年前关闭。




这两个正则表达式有什么作用?

/<(.*?)>.*?<\/\1>/

/<(.*?)>.*<\/\1>/

我学到的是 .*?意味着尽可能少的字符。

例如:
  my $a = '"helllo"++"world"';

print "a $1\n" if $a =~/(".*")/; # "helllo"++"world"

print "b $1\n" if $a =~/(".*?")/; # "helllo"

print "c $1\n" if $a =~/(.*)/; # "helllo"++"world"

print "d $1\n" if $a =~/(.*?)/; # (nothing)

为什么 d 什么都不显示,而 b 是 helllo不是 "" ?

所以,我找不到任何好的例子来说明 1 and 2 之间的区别。喜欢 helllo world例子。

有人可以通过举一些例子来帮助说明差异吗?

谢谢。

最佳答案

.*?将使用尽可能少的字符搜索匹配项。如果您正在匹配 ".*?"反对 "a" "b" ,正则表达式引擎将仅报告 "a"作为比赛。贪心版".*"会将整个字符串报告为匹配项,因为 *想要消耗尽可能多的输入。

正则表达式 .*?可以对一个空字符串感到满意,所以如果你没有在它周围放置任何东西来防止匹配,这正是它会做的(就像你的情况 d)。

您的正则表达式 1) 和 2) 用于解析看起来像 XML 的文本。考虑一下这段文字:

<tag>text</tag> <tag>more text</tag>

正则表达式 1) 将只消耗第一个标记的子字符串 <tag>text</tag> ,而正则表达式 2 消耗整个字符串。

现在考虑这段文字:
<tag>what about <tag>nested</tag> tags?</tag>

正则表达式 1) 只会在第一次结束前产生匹配 </tag>而正则表达式 2) 消耗整个字符串。

关于regex - 正则表达式 。*?和 。*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com