以下正则表达式正在跳跃 [url] 标签...
正则表达式 (通用正则表达式)
(?:\[url.*?\])(.*?youtu.*?)(?:\[\/url\])
字符串:
[url]blahyoutubeblah[/url] heyya [url]blahblah[/url] [url]www.youtube.com/blah[/url]
帮助!
答案 0 :(得分:2)
您捕获的组中需要youtu
,因此子字符串
[url]blahblah[/url] [url]www.youtube.com/blah[/url]
匹配,因为它以[url]
开头,包括youtu
,以[/url]
结尾。
仅使用否定的字符集(不包括[
)可能是不够的,因为这将不允许嵌套标记匹配,例如输入
[url]foobar youtube[b]BOLD TEXT[/b][/url]
在每个重复字符之前,您可能需要对[/url]
进行负前瞻:
(?:(?!\[\/url\]).)*
另外,请确保在[url
之后出现的所有东西在包含真]
之前不包含]
,并带有:
\[url[^]]*\]
完整:
\[url[^]]*\]((?:(?!\[\/url\]).)*youtu(?:(?!\[\/url\]).)*)\[\/url\]
由于前瞻性较差,因此不再需要使量词变得懒惰。
演示:
答案 1 :(得分:1)
您要匹配.*
,这意味着它将匹配url
,直到youtu
,然后找到/url
一个简单的解决方法可能是类似的,这意味着它在找到[
之前不会与youtu
开头的括号匹配
(?:\[url.*?\])([^\[]*?youtu.*?)(?:\[\/url\])
答案 2 :(得分:1)
这很懒,但是如果可以的话,它仍然会匹配-如果可能的话,它不会向左移动。还有其他事情可以做到。其中之一只是为了防止正则表达式本身发生不必要的匹配-只需使用
(?:\[url[^\]]*?\])([^\[]*?youtu.*?)(?:\[\/url\])
答案 3 :(得分:1)
问题是您的正则表达式中有youtu
,但是blahblah
之间有url
要匹配,因此很通用
所以
(?:\[url.*?\])(.*?)(?:\[\/url\])