需要正则表达式来解析带有单引号或双引号的keyword ='value'

Dou*_*aye 8 regex quotes preg-match

我在编写一个正则表达式(适用于PHP的preg_match())时遇到问题,它将解析keyword ='value'对,无论<value>字符串是用单引号还是双引号括起来.IOW在以下两种情况下我都需要获取<name>和<value>,其中<value>字符串可能包含非封闭类型的引号:

name="value"
name='value'
Run Code Online (Sandbox Code Playgroud)

Cop*_*pas 14

在Perl中,这是一个可行的正则表达式.它首先匹配行的开头,然后匹配一个或多个非=字符并将它们设置为$ 1.接下来它查找=然后是非括号,可以选择匹配"或"并将其设置为$ 2.

/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/
Run Code Online (Sandbox Code Playgroud)

如果你想让它匹配像空白的表达式.

这=""

将最后两个+替换为*否则这应该有效

编辑 正如评论中所述.道格用过......

 /^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/
Run Code Online (Sandbox Code Playgroud)

这将匹配输入或值的以太端上的一个可选空格,并且已删除行结束标记.

  • 它将匹配name ='asd'和双引号,并且这是不正确的. (2认同)
  • 这是我使用的最终版本.它被单引号转义,对空格更宽容.谢谢您的帮助!?/ ^\S([^ =] +)\ S =\S( "([^"] +)"|\'([^ \'] +)\')???\ S / (2认同)