【发布时间】:2015-09-17 18:02:30
【问题描述】:
试图找出正则表达式让我脑筋急转弯 :)
我正在使用允许我在内容上运行正则表达式的插件,用 WordPress 帖子内容中的单个短代码替换数千个单独的 hreflinks。
我没有尝试将 SQL 查询与 RegEx 结合起来,而是分两个阶段进行:首先使用 SQL 查找/替换每个单独的 URL 到单独的短代码,第二阶段,删除其余的 ' href` 链接标记。
这些是我从第一步开始得到的一些例子;如您所见,该 URL 已替换为 [nggallery id=xxx] 短代码。
<a href="[nggallery id=xx]"><span class="shutterset">
<img class="alignnone size-large wp-image-23067" title="Image Title"
src="http://example.com/wp-content/uploads/2015/06/image-title.jpg"
alt="" width="685" height="456" /></span></a>
<a href="[nggallery id=xxxxx]">Click here!</a>
<a title="title title" href="[nggallery id=xxx]" target="_blank">Title Link Title Link</a>
现在,我需要删除前导 <a 和结尾 </a> 之间的所有 href 链接标记 - span、img 等,只留下短代码 [nggallery id=xxx]。
我从这里开始:https://www.regex101.com/r/rL8wP1/2
但我不知道如何防止 [nggallery id=xxx] 短代码在 RegEx 中被捕获。
2015 年 7 月 9 日更新
@nhahtdh 的答案似乎完美无缺,不太贪婪,并且不吃相邻的 html 链接。使用( 和) 作为分隔符,使用$1 作为WordPress 中正则表达式插件的替代品。 (如果使用BBEdit,则需要使用\1)
( <a\s[^>]*"(\[nggallery[^\]]*\])".*?<\/a> )
2015 年 7 月 2 日更新
感谢 Fab Sa (在下面回答),他的正则表达式 https://www.regex101.com/r/rL8wP1/4
<a.*(\[nggallery[^\]+]*\]).*?<\/a>
在 regex101 模拟器中工作,但在 BBEdit 文本编辑器或运行 regex 的 WordPress 插件中使用时,他的 regex 会删除 [nggallery id=***] 短代码。所以是不是太贪心了?其他问题?
2015 年 7 月 1 日更新:
我知道,我知道,回复:RegEx match open tags except XHTML self-contained tags 你不能使用正则表达式解析 HTML
【问题讨论】:
-
你在执行什么正则表达式?我会捕获短代码,然后将其重新插入替换。也许像regex101.com/r/rL8wP1/5 然后
$1这样的东西会有你的简码。如果您希望括号将括号移到括号之外。 -
你可以this正则表达式然后替换捕获的部分。我认为正则表达式可以改进,但这有效。
-
@vks,谢谢,但这仍然会删除短代码....
-
试试
<a.*?(\[nggallery[^\]]*\]).*?<\/a> -
@markratledge 你必须替换为
$1。
标签: html regex html-parsing