我对基本的正则表达式没问题,但是我对 pos/neg 向前/向后看有点迷茫。
我正在尝试从中提取 id #:
[关键字东西=其他东西id=123 morestuff=东西]
之前或之后可能有无限数量的“东西”。我一直在使用 The Regex Coach 来帮助调试我尝试过的内容,但我不再继续前进了......
到目前为止,我有这个:
\[keyword (?:id=([0-9]+))?[^\]]*\]
它会处理 id 之后的任何额外属性,但我不知道如何忽略关键字和 id 之间的所有内容。我知道我不能去[^id]*
我相信我需要像这样使用负前瞻,(?!id)*
但我想因为它是零宽度,它不会从那里向前移动。这也不起作用:
\[keyword[A-z0-9 =]*(?!id)(?:id=([0-9]+))?[^\]]*\]
我一直在寻找示例,但没有找到任何示例。或者也许我有,但他们太过分了,我什至没有意识到他们是什么。
帮助!谢谢。
编辑:它也必须匹配 [keyword stuff=otherstuff],其中 id= 根本不存在,所以我必须在 id # 组上有一个 1 或 0。还有其他 [otherkeywords id=32] 我不想匹配。文档需要使用 preg_match_all 在整个文档中匹配多个 [keyword id=3]。