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处理包……我不能使用任何其他工具