需要正则表达式用单引号或双引号解析关键字='值'
Posted
技术标签:
【中文标题】需要正则表达式用单引号或双引号解析关键字=\'值\'【英文标题】:Need regex to parse keyword='value' with single or double quotes需要正则表达式用单引号或双引号解析关键字='值' 【发布时间】:2010-11-01 00:27:00 【问题描述】:我在编写一个正则表达式(适用于 php 的 preg_match())时遇到问题,该表达式将解析关键字='value' 对,无论
name="value"
name='value'
【问题讨论】:
【参考方案1】:在 Perl 中,这是一个可以工作的正则表达式。它首先匹配行首,然后匹配一个或多个非 = 字符并将它们设置为 $1。接下来,它查找 = 然后查找非括号,并选择匹配 " 或 ' 并将其设置为 $2。
/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/
如果您希望它匹配空白表达式,例如。
这=""
用 * 替换最后两个 + 否则应该可以工作
编辑 如 cmets 中所述。道格用过……
/^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/
这将匹配输入或值以太网端的一个可选空格,并且他已删除行尾标记。
【讨论】:
它将匹配 name='asd" 与 and 处的双引号,这是不正确的。 不再匹配不匹配的报价集。 这不太对。 /^([^=]+)=(?:"([^"]+)"|'([^']+)')"$/ 我相信行尾元字符之前的双引号应该不在那里。 @Doug - 很荣幸得到 IT Conversations 的出版商的纠正 :)。谢谢更正。 这是我使用的最终版本。它对单引号进行了转义,对空格更宽容。谢谢您的帮助! /^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/【参考方案2】:/^(\w+?)=(['"])(\w+?)\2$/
这会将键放在$1
中,将值放在$3
中。
【讨论】:
【参考方案3】:晚了几年,但由于这个问题在 google 上排名很高,而且答案不能满足我的需求,这里是另一个 expression:
(?<key>\w+)\s*=\s*(['"]?)(?<val>(?:(?!\2)[^\\]|\\.|\w)+)\2
这将匹配单引号或双引号,同时考虑转义引号和未加引号的值。
name = bar
name = "bar"
name = 'bar'
name = "\"ba\"r\""
但是,它确实有一个限制,如果一个值丢失,则读取下一个键/值对中的键。这可以通过使用 comma separated list 的键/值对来解决。
【讨论】:
以上是关于需要正则表达式用单引号或双引号解析关键字='值'的主要内容,如果未能解决你的问题,请参考以下文章