Php preg\u match\u all\r\n混淆

Php preg\u match\u all\r\n混淆,php,regex,url,preg-match-all,Php,Regex,Url,Preg Match All,我尝试从bbcode文本中提取所有未格式化的URL。 正则表达式应匹配: 1. "^http://xyz.abc$" 2. "(http://xyz.abc)" 3. " http://xyz.abc " 但不是像[url]那样格式化的bbcode urlhttp://xyz.abc[/url] 最后一个正则表达式是 #(?:^|\s|\()((?:www\.|https?:(?:\/\/)).*?\..*?)(?:\s|\)|$)#i 测试时,我遇到了一些问题,并发现问题来自\r\n。 例

我尝试从bbcode文本中提取所有未格式化的URL。 正则表达式应匹配:

1. "^http://xyz.abc$"
2. "(http://xyz.abc)"
3. " http://xyz.abc "
但不是像[url]那样格式化的bbcode urlhttp://xyz.abc[/url]

最后一个正则表达式是

#(?:^|\s|\()((?:www\.|https?:(?:\/\/)).*?\..*?)(?:\s|\)|$)#i
测试时,我遇到了一些问题,并发现问题来自\r\n。 例如:

$matches包含第一个和最后一个url

但是使用\r\n

$text = "http://www.url.com/xxx/yyy/1.html\r\nhttp://www.url.com/xxx/yyy/2.html\r\nhttp://www.url.com/xxx/yyy/3.html";
$matches包含所有URL。为什么它不能与\n一起使用


您可以在这里验证这一点

我现在自己修复了它

#(?:^|\s|\()((?:www\.|https?:(?:\/\/)).*?\..*?)(?:\s|\)|$)#im

m修饰符修复了^…$问题。

因此您遇到了\r\n问题?问题是,如果输入仅带有\n,则正则表达式与第二个url不匹配。您的意思是什么?提取的url将被处理并转换为工作bbcode url,如[url]=http://...]标题[/url]并放置在文本中。因此,是的,需要换行符。
#(?:^|\s|\()((?:www\.|https?:(?:\/\/)).*?\..*?)(?:\s|\)|$)#im