0

我正在尝试捕获这样的字符串:

document.all._NameOfTag_ != null ;

如何捕获子字符串:

document.all._NameOfTag_

和标签名称:

_NameOfTag_

到目前为止我的尝试:

if($_line_ =~ m/document\.all\.(.*?).*/)
{

}

但它总是贪婪并捕获_NameOfTag_ != null

4

3 回答 3

6

懒惰的(.*?)人总是什么都不匹配,因为后面的贪婪.*总是匹配一切。

你需要更加详细:

if($_line_ =~ m/document\.all\.(\w+)/)

之后将只匹配字母数字字符 document.all.

于 2013-01-14T12:50:42.057 回答
2

你的问题是惰性量词。惰性量词将始终首先尝试取消匹配正则表达式中的下一个组件,并且仅当所述下一个组件不匹配时才会使用文本。

但是在这里,您的下一个组件是.*, 并.*匹配所有内容,直到您的输入结束。

改用这个:

if ($_line_ =~ m/document\.all\.(\w+)/)

另请注意,不需要匹配所有文本。正则表达式只需要匹配它必须匹配的内容,其他什么都不需要。

于 2013-01-14T12:55:36.890 回答
0

请尝试以下方法,个人我觉得它更清楚:

document\.all\.([^ ]*)
于 2013-01-14T12:51:13.650 回答