为了账号安全,请及时绑定邮箱和手机立即绑定

变量正则表达式 ("*" 这个字符可能在这里也可能不在这里)VALUE*

变量正则表达式 ("*" 这个字符可能在这里也可能不在这里)VALUE*

PHP
狐的传说 2021-10-22 13:12:08
如果我想在正则表达式中搜索以下内容,我怎么可能做到这一点?我想在每个字符串中获得“价值”。this-is-a-set-syntax: VALUE "in 9"(this can be here sometimes and not)regex: /this-is-a-set-syntax: "(.*)"如果我想检测"它是否在那里,那么我该怎么做?我认为它应该怎么写:regex: /this-is-a-set-syntax: [?"](.*)[?"]this-is-a-set-syntax: "VALUE" (sometimes there is quotes)this-is-a-set-syntax: "VALUE" (sometimes there is quotes)this-is-a-set-syntax: VALUE (sometimes there is no quotes at all)如果我想尝试检测所有这些,我会尝试这样的事情。this-is-a-set-syntax: ["|*|]VALUE["|*|][? in [0-9]+|]-- 更新 -- 以下所有答案,但这是我认为最合适的答案。话虽如此,它们都有效,它们都是很好的答案。为了教育目的,你们都可以用一点解释来更新你的答案吗?谢谢,这最适合我的回答:this-is-a-set-syntax: ["|*|]?VALUE["|*|]?([? in [0-9]+|])?不错,但上衣更合身:this-is-a-set-syntax:["* ]*VALUE["* ]*?([? in [0-9]+|])?我也喜欢下面一张。我个人从未见过 \1 并且也有兴趣了解有关此答案的更多信息。如果可以,我会标记所有,但我认为顶部最接近我需要的。this-is-a-set-syntax:["* ]*VALUE["* ]*?([? in [0-9]+|])?
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

Using[?"](.*)[?"]将匹配其中之一,?"然后匹配除换行符之外的任何字符 0+ 次,然后再次?"匹配字符串中的最后一次出现。它可以过度匹配并且不保证伴随的结束字符。

要在所有示例中获得价值,您可以使用捕获组并将可选双引号("?)与反向引用\1匹配,以解释匹配的结束双引号。

如果您只想匹配没有任何空格的值并且值本身不能包含任何*|"您可以使用的值:

this-is-a-set-syntax:\h+([*|"]?)([^\s*|"]+)\1(?!\S)

解释

  • this-is-a-set-syntax:\h+ 匹配字面后跟 1+ 个水平空白字符

  • ([*|"]?)第 1 组,匹配一个可选的* |?

  • ([^\s*|"]+)第 2 组,匹配除空白字符以外的任何字符 1+ 次,* |?

  • \1 反向引用第 1 组中准确捕获的内容以获得伴随的结束字符

  • (?!\S) 负前瞻,断言右边的不是非空白字符


查看完整回答
反对 回复 2021-10-22
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

您可以使用分支重置组来匹配两个选项,其中组共享相同的索引并匹配和捕获分隔子字符串或 1 个或多个非空白字符:

this-is-a-set-syntax:\s*(?|(["|*])(.*?)\1|()(\S+))

查看正则表达式演示

细节

  • this-is-a-set-syntax: - 一些字符串

  • \s* - 0+ 个空格

  • (?| - 分支复位组的开始

    • (["|*])- 第 1 组:指定字符之一:"|*

    • (.*?) - 第 2 组:除换行符以外的任何 0 个或更多字符,尽可能少

    • \1 - 与第 1 组相同的值

  • | - 或者

    • () - 匹配空字符串的虚拟组 1

    • (\S+) - 第 2 组:除空格之外的一个或多个字符

  • ) - 分支复位组结束。


查看完整回答
反对 回复 2021-10-22
  • 2 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信