我无法写一个正则表达式(适合PHP的的preg_match()),将解析关键字=“值”对无论<值>的字符串是否被包含在单引号或双引号。 IOW在两个以下的情况下,我需要得到的和<值>其中<值>字符串可能包含引号的非封闭类型:

name="value"
name='value'
有帮助吗?

解决方案

在Perl的,这是一个正则表达式,将工作。它首先匹配的线的开始然后一个或多个非=字符匹配,并将它们设置到$ 1。接着它查找=则非括号与“或”匹配的一个选择,并设置到2 $

/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/

如果您希望它匹配面无表情等。

此= “”

替换最后两个+有*否则这应该工作

修改 正如在评论中提到。道格用于...

 /^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/

这将在输入或值的醚端匹配一个可选空格和他已经除去线标记的末尾。

其他提示

/^(\w+?)=(['"])(\w+?)\2$/

,这将使在$1钥匙,和$3值。

几年较晚,但因为这个问题是高度排在谷歌,答不符合我的需求,这里有另外的表达

(?<key>\w+)\s*=\s*(['"]?)(?<val>(?:(?!\2)[^\\]|\\.|\w)+)\2

这将匹配单引号或双引号,考虑到转义引号,和带引号的值。

name = bar
name = "bar"
name = 'bar'
name = "\"ba\"r\""

然而,它确实有一个限制,如果值是缺少从下一个键/值对的密钥被读出。这可以通过使用一个逗号分隔的键/值对列表加以解决。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top