【发布时间】:2012-06-13 13:24:51
【问题描述】:
不知道这是怎么发生的,但似乎我的 perl 正则表达式匹配在匹配后不会更新到下一个匹配。它没有在每次匹配时更新 $& 和 $1 变量,而是卡在第一个变量中。
我到处寻找,发现这非常令人沮丧。
查看下面调试器的输出,如您所见,第一个匹配有意义,但第二个没有。
谢谢
DB<79> $riz =~ m{url=(.*?)Support};
DB<80> p$&;
url="http://www.svartapelsin.se" draggingName="Bunny Camp Support
DB<81> $riz =~ m{href=(.*artist?)};
DB<82> p $&;
url="http://www.svartapelsin.se" draggingName="Bunny Camp Support
DB<83>
更新: 这是另一个示例,显示文本“艺术家”在字符串中,但仍未找到。 $riz 的值是一个巨大的 HTML 代码,所以很难发布。
DB<103> $riz =~ m{url=(.*?)Support};
DB<104> p $&;
url="http://www.svartapelsin.se" draggingName="Bunny Camp Support
DB<105> $riz =~ m{artist};
DB<106> p $&;
url="http://www.svartapelsin.se" draggingName="Bunny Camp Support
DB<107> p string.index($riz,"artist");
string105
DB<108>
我的 $riz 是这个链接中的所有 HTML http://itunes.apple.com/us/app/id385972277
当您使用用户代理时 iTunes/10.2(Macintosh;U;PPC Mac OS X 10.2)
这是另一个使用相同 $riz 的示例
DB<128> $riz =~ m/.*/;
DB<129> p $&;
url="http://www.svartapelsin.se" draggingName="Bunny Camp Support
DB<130>
...
DB<136> p substr $riz,0,20;
<?xml version="1.0"
DB<137>
我的意思是,这不是很荒谬吗?它应该刚刚输出了 $riz no 的值吗?如您所见,与所显示的形式不同。另外,m/.*/ 怎么可能不是有效的正则表达式?
【问题讨论】:
-
如果$riz不匹配,那么
$&不会被修改。 -
添加了一些示例代码..
-
这里要学习的教训是,在大多数情况下,将匹配操作视为一个函数并简单地使用它的返回值,这样不容易出错 i>,不要依赖奇怪的副作用变量
$1、$&和朋友。在调试器中输入x $riz =~ m{url=(.*?)Support}。 -
什么是 $riz。你还没有发布。此外,您似乎认为您正在编写 javascript。 "string.index" 并没有像你想象的那样做。
-
添加了对正确的 $riz 的引用和另一个我觉得很奇怪的例子