我目前使用这个:
$text = preg_replace('/' . $line . '/', '[x]\\0[/x]', $text);
$line
是一个简单的正则表达式:
https?://(?:.+?\.)?dailymotion\.com/video/[A-Za-z0-9]+
到目前为止,这工作正常。但是有两件事我需要但我不知道如何做到这一点:
BBCode
...如果该字符串包含在ie中,我不想执行替换
[bla]http://www.dailymotion.com/video/xuams9[/bla]
或者
[bla=http://www.dailymotion.com/video/xuams9]trololo[/bla]
或者
[bla=' http: //www.dailymotion.com/video/xuams9 ']http://www.dailymotion.com/video/xuams9[/bla]
第二件事是,我只想匹配到第一个空格。这是我目前使用的:
$text = preg_replace('/' . $line . '(?:[^ ]+)?/', '[x]\\0[/x]', $text);
我不知道,我是否应该这样做,或者是否有更好的方法。
所以,基本上我只是想匹配
由此:
[tagx='http://www.dailymotion.com/video/test1']http://www.dailymotion.com/video/test2[/tagx] | [tagy]Hello http://www.dailymotion.com/video/test3 World[/tagy] | [tagz]Hello World[/tagz] http://www.dailymotion.com/video/test4
编辑:
这就是我到目前为止所拥有的(稍微有效):
(?:(?<!(\[\/url\]|\[\/url=))(\s|^))' . $line . '(?:[^ ]+)(?:(?<![[:punct:]])(\s|\.?$))?