【问题标题】:Two PCRE regular expressions两个 PCRE 正则表达式
【发布时间】:2014-09-24 22:10:29
【问题描述】:

我需要转这个格式[url]3a7cHPy04s8[/youtube]

转入:[media=youtube]3a7cHPy04s8[/media]​

还有这种格式https://www.youtube.com/watch?v=h_JfHLs2Nc4

转入:[media=youtube]h_JfHLs2Nc4[/media]​

它们将用于此工具 https://xenforo.com/community/resources/post-content-find-replace.1549/

感谢您的帮助!

【问题讨论】:

  • 域是变量吗?
  • 不,我不这么认为

标签: regex pcre


【解决方案1】:

匹配:

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

或者:

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

并替换为:

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

【讨论】:

  • 它是两个替代品!
【解决方案2】:

使用这个正则表达式替换:

(?|\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

【讨论】:

  • @Sam 谢谢 :) 也会在 18 分钟内或当我回家时投票赞成你的答案,这取决于哪个先到,考虑到我必须前往一个函数并且我没有为这个 Stack 投票溢出日;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2014-08-02
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多