我正在尝试捕获这样的字符串:
document.all._NameOfTag_ != null ;
如何捕获子字符串:
document.all._NameOfTag_
和标签名称:
_NameOfTag_
到目前为止我的尝试:
if($_line_ =~ m/document\.all\.(.*?).*/)
{
}
但它总是贪婪并捕获_NameOfTag_ != null
答案 0 :(得分:6)
懒惰的(.*?)
将始终不匹配,因为以下贪婪的.*
将始终匹配所有内容。
你需要更具体:
if($_line_ =~ m/document\.all\.(\w+)/)
仅匹配document.all.
答案 1 :(得分:2)
你的问题是懒惰的量词。延迟量词将始终首先尝试取消与正则表达式中下一个组件的匹配,并且只有在所述下一个组件不匹配时才会使用该文本。
但是,您的下一个组件是.*
,.*
会匹配所有内容,直到输入结束。
请改用:
if ($_line_ =~ m/document\.all\.(\w+)/)
并且还要注意,并不要求所有文本都匹配。正则表达式只需匹配它所匹配的内容,而不是其他内容。
答案 2 :(得分:0)
尝试以下方式,个人我觉得更清楚:
document\.all\.([^ ]*)