Kal*_*vas 1 php regex string template-matching capturing-group
一如既往,我是世界上最差的正则表达者.但这次我真的尝试过.
所以我的目标是制作一个处理搜索相关内容的正则表达式.搜索查询可能是这样的:
但它应该能够分别检测它们.它应该能够检测直接匹配的引用.只有标题,必须在它后面有搜索查询,但其他条件可以是任何顺序.
现在我很困难..我设法做了这个正则表达式.它仅适用于状态:封闭类型:图像标题:堆栈溢出.()thingis 之间的点使它工作.如果我用|替换它,那么我得到第一部分匹配.但是,对于我而言,使用所有可能的查询格式来实现此功能是不可行的.
/(?:(?:status[:](closed|open)).(?:type[:](image|video)).(?:(?:title|author|actor|movie)[:](.+)))/i
Run Code Online (Sandbox Code Playgroud)
下面是工具,我试图做这一切:http://regexr.com/39an1我的涂鸦就在那里了.
这是针对搜索引擎类型的东西.所以我希望从匹配中获得结果,在PHP中很容易使用.此外,我认为有人可以从中受益,它会有一个解决方案.
如果有人能指出我的话,至少点对点 主要的()东西之间.感觉就像| =或者,但我想要有点像和/或东西.
看到正则表达式:
/^(?=.*status[:=](\S+)|)(?=.*type[:=](\S+)|)(?:.*?title[:=])?(?|"([^"]+)"|((?:(?!\s?(?:type|status)).)+))[^"]*$/
Run Code Online (Sandbox Code Playgroud)
您可以使用捕获组提取信息.
这是一个正则表达式演示!
表达解释:
^ 在字符串开头处断言位置.(?= 积极的向前看 - 在我们的比赛中断言以下比赛:.* 然后是:status[:=]字符序列"status",后跟":"或"=".(\S+) 捕获组 -下一个非空白序列.如果您想为此捕获组提供可选空格:要同时允许状态:false和status:false,请将此组和同一组更改为楼下
(\s?\S+)!
| 要么)(?=.*type[:=](\S+)|) 尝试理解这个组,它与上面的组相同.(?:.*?title[:=])?可选匹配:尝试在此字符串中的任何位置捕获"title"后跟":"或"=".如果它存在,将指针移动到此位置,否则回溯并使该组失败.(?| 分支重置 - 对以下变更使用相同的捕获组ID:"([^"]+)"如果我们的指针位置与引号匹配,请尝试将其中的所有内容与下一个引号匹配.捕获组:捕获其中的所有内容并完成分支重置组.| 要么(开设捕获小组.(?: 一组.(?! 否定前瞻 - 断言以下不是:\s?(?:type|status))一个可选的空格,后跟"type"或"sequence".. 然后,匹配一个角色.)+ 重复,直到没有更多.)) 关闭这两组.(理论上,以下元素是多余的.)
[^"]*吃其余的线.在这一点上并不重要.$ 在String的末尾断言位置.将\n在演示在那里因多元素.对于您的实际使用,您将无法获得它.