我有以下regex
,它会在我的HTML中找到所有背景样式的网址。我试图删除除背景图片网址之外的所有HTML。我的目标是从我的HTML页面中抽象出一个背景图像URL列表。
表达式URL\(\s*(['"]?)(.*?)\1\s*\)
示例HTML
<a href="#"><img style="background-image: url(http://domain.com/2003-Th.jpg)"></a>
我想做的不是这个表达。
答案 0 :(得分:1)
我不知道netbeans ide,所以这只是猜测。
但要注意:你到处搜索url(...)
。文本出现的位置无关紧要:在CSS块中,在html样式属性中,在javascript中,还有纯文本和注释!
如果您真的只想包含背景图片,那么您也应该在正则表达式中说明。所以它变成
\bbackground-image\s*:\s*URL\(\s*(['"]?)(.*?)\1\s*\)
为了加快速度(至少在某些实现中),请尝试防止反向引用。在这种情况下
\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)
它有点多,但至少在崇高的文本中它是值得的。
要替换背景图像中除网址之外的所有内容,您可以使用单个正则表达式
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)|[\s\S]+
并用$1$2$3\n
替换所有内容。最后总共有两个\n
,但我认为应该没问题。
这在某些正则表达式引擎中不起作用,其中元素的顺序不是决定性的,而是匹配的长度。
但是,如果这是一个问题,您可以尝试使用
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)[\s\S]*?(?=\z|\bbackground-image\s*:\s*URL\(\s*(?:'[^']+'|"[^"]+"|[^)]+)\s*\))
并使用$1$2$3\n
替换所有内容。
[\s\S]
表示每个角色(包括\n
)\b
是一个单词边界(?= ... )
是一个积极的向前看。它必须匹配但不是结果的一部分\z
是文字的结尾(也许你必须稍微调整正则表达式以适应netbeans)
无论如何,并非每个正则表达式的实现都支持前瞻。如果netbeans不支持这一点,则必须使用多步骤方法:
替换
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)
>-BG-URL:$1$2$3\n
。
>-BG-URL:
表示值并将其与其他值区分开来。
在最后一场比赛后手动更换所有内容(您根本不需要--BG-URL
)或替换
^>-BG-URL:(.*)|^[\s\S]+
$1