带有可选参数的BBCode正则表达式

时间:2014-09-24 22:25:53

标签: regex

我目前仍然坚持使用正则表达式。我试图获取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

然而,这个还包括比赛列表中的第二个参数以及更多我想要匹配的东西。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我做了一些改变来做你想做的事。我已将您的版本包含在此处以便于比较:

你的:http://regex101.com/r/dE4aE4/1

\[tag(?:=[\'"]?(.*)[\'"]?)?]([^]]*)?\[/tag]

我的:http://regex101.com/r/dE4aE4/3

\[tag(?:=[\'"]?([^,]*?)(?:,[^]'"]+)?[\'"]?)?]([^\[]+)?\[/tag]

观察我更改了一点以获取没有昏迷(,)的网址:从(.*)([^,]*?)(?:,[^]'"]+)?

我还修复了内容部分:从([^]]*)?([^\[]+)?