Regex 为什么这个正则表达式不匹配
我对以下正则表达式有一个问题: 我想匹配以下字符串:Regex 为什么这个正则表达式不匹配,regex,tcl,Regex,Tcl,我对以下正则表达式有一个问题: 我想匹配以下字符串:employee Type=“entry”id=“mmop”location=“某处” 使用RE的步骤如下: if {[regexp {id=(".*")} $data -> Id]} { #do something here } 但是我得到的结果是“entry”id=“mmop”location=“somewhere”,如何修复它?在*之后添加?,或者将替换为[^]。问题是由于*贪婪,在仍然匹配模式的情况下
employee Type=“entry”id=“mmop”location=“某处”
使用RE的步骤如下:
if {[regexp {id=(".*")} $data -> Id]} {
#do something here
}
但是我得到的结果是
“entry”id=“mmop”location=“somewhere”
,如何修复它?在*
之后添加?
,或者将
替换为[^]
。问题是由于*
贪婪,在仍然匹配模式的情况下攫取了它所能获得的一切。在*
之后添加?
,或者将
替换为[^”]
。这个问题是由于*
贪婪,在仍然匹配模式的情况下攫取了它所能获取的一切。要使用非冻结匹配,请改用*?
。不明白是什么造成的。*?表示,.*表示匹配所有内容,即使是空字符串,什么。*?意思是?*
意思是“尽可能匹配”;*?
意思是“尽可能少地匹配”。我尝试使用if{[regexp{id=([^”].}$data->id]}{{在这里做点什么}但它不匹配你需要在…周围保留引号好的,没关系,直接使用它并复制:{id=“([^”]*?)}
若要使用ungreedy匹配,请改为使用*?
。不明白是什么造成的。*?表示,.*表示匹配所有内容,即使是空字符串,什么。*?意思是?*
意思是“尽可能匹配”;*?
意思是“尽可能少地匹配”。我尝试使用if{[regexp{id=([^”].}$data->id]}{{在这里做点什么}但它不匹配你需要在…周围保留引号好的,没关系,直接使用它并复制:{id=“([^”]*?)}
这可能是一个输入错误,但看起来您应该得到的是“mmop”location=“某处”
,而不是“entry”id=“mmop”location=“某处”
?你能验证一下吗?如果这真的是XML——它看起来很像你在一对
中找到的东西——用它来解析它。Tdom对于Tcl来说是一个非常好的XML处理包……我不能使用任何其他工具。这可能是一个输入错误,但看起来您应该得到“mmop”location=“somewhere”
,而不是“entry”id=“mmop”location=“somewhere”
?你能验证一下吗?如果这真的是XML——它看起来很像你在一对
中找到的东西——用它来解析它。对于Tcl来说,Tdom是一个非常好的XML处理包……我不能使用任何其他工具