【问题标题】:Regexp to match options which are delimited by spaces and also have spaces in their content正则表达式匹配由空格分隔且内容中也包含空格的选项
【发布时间】:2021-08-31 05:19:59
【问题描述】:

我正在解析一个 Wordpress 短代码,并希望主要使用 PCRE 以最终了解它。

以下短代码是我希望解析的:

[testing att1='hello' att2='hello again' att3='£100']

我目前的正则表达式是:

\s?([a-z0-9_]*='[[:graph:]\£]*')\s?

这匹配att1att3,但不匹配att2,因为其中包含空格。但是,当我将正则表达式修改为:

\s?([a-z0-9_]*='[[:graph:]\s\£]*')\s?   --- note the '\s' after [:graph:]

它完全匹配从“att1”到“att3”,即att1='hello' att2='hello again' att3='£100'。如何匹配 att2 以包含空格并保留空格是分隔符这一事实。

我认为我的问题是我如何说明该组如何终止但不确定!

【问题讨论】:

  • 也许您只需要\w+='[^']*'?见regex101.com/r/F2naVc/1
  • 谢谢。请添加为答案,我会接受!有一件事让我思考。为什么我们必须说“不要匹配撇号”,如果它最终会匹配(假设我已经理解了语法)
  • 我不明白你的意思,最后的'与模式中的最后一个'匹配。
  • 是的 - 对不起! [^'] 匹配除撇号之外的任何内容 - 不是“不匹配撇号”(!)。在过去的 24 小时内,我一直在查看很多正则表达式。过了一会儿,一切都变得模糊了……

标签: pcre


【解决方案1】:

如果你想匹配带有单引号参数的属性,你可以使用

\w+='[^']*'

请参阅regex demo详情

  • \w+ - 一个或多个字母、数字或下划线
  • =' - =' 字符串
  • [^']* - 除' 之外的零个或多个字符
  • ' - ' 字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多