帮助Regex - Wordpress(search-regex)

时间:2009-08-01 13:33:47

标签: php regex wordpress pcre

我第一次尝试使用RE让我陷入困境。我通过Search-Regex Plugin在Wordpress网站上使用正则表达式,并且需要匹配特定的“隐藏在一堆html代码中.HTML示例:

provide brand-strengthening efforts for the 10-school conference.&#0160; </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实现。)

5 个答案:

答案 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([^"]*)"/

第一个分组的匹配将是您要查找的字符串。