我第一次尝试使用RE让我陷入困境。我通过Search-Regex Plugin在Wordpress网站上使用正则表达式,并且需要匹配特定的“隐藏在一堆html代码中.HTML示例:
provide brand-strengthening efforts for the 10-school conference.  </p>
<p>
<a href="http://www.learfield.com/oldblog/.a/6a00d8345233fa69e201157155a6fc970c-pi">
<img alt="MOvalleyConf500"
border="0"
class="at-xid-6a00d8345233fa69e201157155a6fc970c"
src="http://www.learfield.com/oldblog/.a/6a00d8345233fa69e201157155a6fc970c-800wi"
style="border: 1px solid black; margin: 0px; width: 502px; height: 384px;"
title="MOvalleyConf500" />
</a>
</p>
<p>The photo above
在上面的例子中,有三个目标
6a00d8345233fa69e201157155a6fc970c-pi"
6a00d8345233fa69e201157155a6fc970c"
6a00d8345233fa69e201157155a6fc970c-800wi"
我使用的正则表达式是/6a00d834.*?"/
它找到它们,但是我只想匹配结尾"
而不是整个字符串。这些是缺少文件扩展名的图片,所以我需要替换结尾“with .jpg”我理解表达式的替换部分,这是我遇到问题的初始匹配。
我有一堆这些(221),所有目标都以6a00d834
开头,然后是一些以"
欣赏任何见解。谢谢。
从OP的评论添加编辑:实际上它是在Wordpress网站上使用插件(REGEX)来查询和替换SQL中的数据。我可以使用任何Perl兼容的正则表达式。 (编辑注意 - 根据插件的不同,这很可能实际上并不是使用Perl而是PHP的PCRE实现。)
答案 0 :(得分:4)
字符串替换可以与匹配一起完成。由于您使用的是PHP,请使用preg_replace
$newstring = preg_replace("/(6a00d834.*?)(\")/", "\\1.jpg\\2", $oldstring)
这会将匹配分为两组,然后在它们之间插入“.jpg”。
对于wordpress regex plugin,请使用/(6a00d834.*?)(")/作为匹配字符串,然后使用\ 1.jpg \ 2作为替换字符串。
答案 1 :(得分:2)
这不会起作用吗?
/(6a00d834.*?)"/
修改:您在其中一条评论中说,您希望将"
替换为.jpg"
;在这种情况下,这个正则表达式可能会起作用:
/6a00d834.*?(")/
但是,最好的办法是使用我提供的第一个正则表达式,并使用如下所示的替换字符串:
'\\1.jpg"'
当然,\\1
必须替换为特定regexp引擎用于反向引用的任何内容。
答案 2 :(得分:1)
你的问题并不完全清楚,但也许你的意思是:
/6a00d834[^"]*"/
(即:匹配6a00d834后跟零个或多个不是“后跟”的字符)
或者,如果它在您正在使用的正则表达式引擎中可用,则可以使用非贪婪的说明符来限制'*'元字符。请记住,有关正则表达式的任何问题都取决于您使用的引擎。例如:
$ cat input 6a00384foo" more" $ perl -ne '/(6a00384[^"]*")/; print "$1\n"' input 6a00384foo" $ perl -ne '/(6a00384.*?")/; print "$1\n"' input 6a00384foo" $ sed 's/\(6a00384[^"]*"\).*/\1/' input 6a00384foo" $ sed 's/\(6a00384.*?"\).*/\1/' input 6a00384foo" more"
注意'?'在sed。中不作为非贪婪的说明符。
答案 3 :(得分:0)
也许使用群组运营商?
/6a00d834.*?(")/
然后,根据你的正则表达式API,你可以得出parens中匹配的内容。
修改
啊,你想做字符串替换。我猜你会用Perl。试试这个:
s/(6a00d834.*?)(")/\1.jpg\2/
答案 4 :(得分:0)
我假设您要在6a00d834
之后提取所有内容,直至第一个"
。所以试试这个:
/6a00d834([^"]*)"/
第一个分组的匹配将是您要查找的字符串。