В настоящее время я пытаюсь получить URL-адрес из BBCode. Для этого есть четыре возможности, и это моя текущая проблема:
[url]http://stackoverflow.com/[/url]
[url='http://stackoverflow.com/']http://stackoverflow.com/[/url]
[url="http://stackoverflow.com/"]http://stackoverflow.com/[/url]
[url=http://stackoverflow.com/]http://stackoverflow.com/[/url]
Мне нужны оба. Это то, что у меня есть до сих пор:
/\[url(?:\=\'([^\'"]+)\')?](.+?)\[\/url]/i
Но это работает только в случаях 1 и 2.
РЕДАКТИРОВАТЬ:
Это работает лучше:
/\[url(?:\=(?:[\"|'])?(.*)(?:[^[]+)?)?\](.*)\[\/url\]/i
Но все же не идеально.
РЕДАКТИРОВАТЬ:
Думаю, я понял. Возможно, потребуется некоторая оптимизация, но, похоже, это работает:
/\[url(?:\=("|\'|)?(.*)?\1)?\](.*)\[\/url\]/i
См. regexp-tester.