正则表达式停在第一个双引号

时间:2018-12-05 03:32:48

标签: regex string

这是我的字符串     '<input type="hidden" name="mode" value="<?=$modeValue?>"/>'

我正在尝试采用1)name="mode"和2)value="<?=$modeValue?>" 从它。

我运行了两个正则表达式来找到它     /name\s*=\s*['\"].*['\"]/的{​​{1}}和name="mode"的{​​{1}}

但是我无法在第一个正则表达式上得到/value\s*=\s*['\"].*['\"]/。 相反,我得到value="<?=$modeValue?>"

但是我成功获得了name="mode"

name="mode" value="$modeValue"的正则表达式有什么问题? 我的观察,我认为我必须使正则表达式在遇到的第一个value="<?=$modeValue?>"处停止。有人知道怎么做吗。我没时间了...

2 个答案:

答案 0 :(得分:0)

您可以创建捕获组以匹配两者

(name=\".*?\")\s*(value=\".*?\")

演示:

https://regex101.com/r/z9dDE2/1

答案 1 :(得分:0)

稍作更改,您的正则表达式就可以使用了。

name\s*=\s*['\"].*?['\"]
                  ^

为什么您的正则表达式无法按照您想要的方式工作。 因此,从本质上讲数量贪婪。会尝试匹配尽可能多的字符。

因此,通过添加,我们将其设置为 lazy (惰性),这意味着它现在将尝试匹配尽可能少的字符。

Demo

如果您想将两个正则表达式连接在一起。

(name=\".*?\")\s*(value=\".*?\")|(value=\".*?\")\s*(name=\".*?\")

Demo2