2014-09-24 79 views

回答

1

比赛:

~\[url\](\w+)\[/youtube\]~ 

或者:

~https?://(?:www\.)?youtube\.com/watch\?\S*?v=(\w+)\S*~ 

并将其替换:

[media=youtube]\1[/media]​ 
+1

是两个替代! – Unihedron 2014-09-24 23:39:09

1

使用这个表达式替换:

(?|\Q[url]\E([\w-]+)\Q[/youtube]\E|https?:\Q//\E(?:youtu\.be\/|(?:www\.)?\Qyoutube.com/watch?v=\E)([\w-]+)) 

要更换到:

[media=youtube]\1[/media]​ 

至于只为你一个好处,它也与http://youtu.be/(id)作品!
查看regex demo here

解释:

/(?| # Branch Reset: Use persistent group ordering 
    \Q[url]\E 
    # Literal "[url]" 
    ([\w-]+) 
    # Stuff that can be within a video ID 
    \Q[/youtube]\E 
    # Closing tag 
| # "or" Alternation, reset group ordering 
    https?:\Q//\E 
    # http(s):// 
    (?: 
    youtu\.be\/ 
    | # youtu.be or (www.)youtube.com/watch?v= 
    (?:www\.)?\Qyoutube.com/watch?v=\E 
) 
    ([\w-]+) 
    # Stuff that can be within a video ID 
)/gx 
+0

让我的+1为2加上我);供参考:我更新了RegEx演示,以包括替代,以防OP不用于看到替换捕获组。 – Sam 2014-09-24 23:40:09

+1

@Sam谢谢:)在18分钟内或者当我回到家时,我会回复你的回答,这取决于哪一个是第一位的,考虑到我不得不面对一个函数,并且在这个堆栈溢出的日子里没有投票权;) – Unihedron 2014-09-24 23:43:12