【发布时间】:2010-11-01 00:27:00
【问题描述】:
我在编写一个正则表达式(适用于 PHP 的 preg_match())时遇到问题,该表达式将解析关键字='value' 对,无论
name="value"
name='value'
【问题讨论】:
标签: regex quotes preg-match
我在编写一个正则表达式(适用于 PHP 的 preg_match())时遇到问题,该表达式将解析关键字='value' 对,无论
name="value"
name='value'
【问题讨论】:
标签: regex quotes preg-match
在 Perl 中,这是一个可以工作的正则表达式。它首先匹配行首,然后匹配一个或多个非 = 字符并将它们设置为 $1。接下来,它查找 = 然后查找非括号,并选择匹配 " 或 ' 并将其设置为 $2。
/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/
如果您希望它匹配空白表达式,例如。
这=""
用 * 替换最后两个 + 否则应该可以工作
编辑 如 cmets 中所述。道格用过……
/^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/
这将匹配输入或值以太网端的一个可选空格,并且他已删除行尾标记。
【讨论】:
/^(\w+?)=(['"])(\w+?)\2$/
这会将键放在$1 中,将值放在$3 中。
【讨论】:
晚了几年,但由于这个问题在 google 上排名很高,而且答案不能满足我的需求,这里是另一个 expression:
(?<key>\w+)\s*=\s*(['"]?)(?<val>(?:(?!\2)[^\\]|\\.|\w)+)\2
这将匹配单引号或双引号,同时考虑转义引号和未加引号的值。
name = bar
name = "bar"
name = 'bar'
name = "\"ba\"r\""
但是,它确实有一个限制,如果一个值丢失,则读取下一个键/值对中的键。这可以通过使用 comma separated list 的键/值对来解决。
【讨论】: