我目前仍然坚持使用正则表达式。我试图获取BBCode的内容,它有可选的参数和可能不同的符号:
[tag]https://example.com/1[/tag]
[tag='https://example.com/2'][/tag]
[tag="http://another-example.com/whatever"][/tag]
[tag=ftp://an-ftp-host][/tag]
[tag='https://example.com/3',left][/tag]
[tag="https://example.com/4",right][/tag]
[tag=https://example.com/5][/tag]
[tag=https://example.com/i-need-this-one,right]http://example.com/i-dont-need-this-one[/tag]
第二个参数可以是左或右,如果给出,我需要第一个参数的URL。否则,我需要在标签之间使用那个。
作为param的网址可以包含在'
或"
内,也可以不包含任何内容。
我目前的正则表达式是:
~\[tag(?|=[\'"]?+([^]"\']++)[\'"]?+]([^[]++)|](([^[]++)))\[/tag]~i
然而,这个还包括比赛列表中的第二个参数以及更多我想要匹配的东西。
有什么建议吗?
答案 0 :(得分:1)
我做了一些改变来做你想做的事。我已将您的版本包含在此处以便于比较:
你的:http://regex101.com/r/dE4aE4/1
\[tag(?:=[\'"]?(.*)[\'"]?)?]([^]]*)?\[/tag]
我的:http://regex101.com/r/dE4aE4/3
\[tag(?:=[\'"]?([^,]*?)(?:,[^]'"]+)?[\'"]?)?]([^\[]+)?\[/tag]
观察我更改了一点以获取没有昏迷(,)的网址:从(.*)
到([^,]*?)(?:,[^]'"]+)?
我还修复了内容部分:从([^]]*)?
到([^\[]+)?