帮助与正则表达式 - WordPress的(搜索正则表达式)(Help with Regex -

2019-09-21 20:36发布

我重新使用第一次尝试有我卡住了。 我就通过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.*?"/它找到他们,但我只是想匹配的结束" ,而不是整个字符串。 这些是缺少自己的文件扩展名的图像,所以我需要“以.jpg”,以取代结束我的理解表达的更换零件,它是我遇到的麻烦的初始匹配。

我有一大堆的这些(221),所有的目标都开始与6a00d834那么一些随机的字母数字结尾用"

欣赏任何见解。 谢谢。

编辑从OP的评论说 :其实它是在使用插件(正则表达式)来查询和SQL之内更换数据的WordPress站点。 我可以使用任何兼容Perl的正则表达式。 (注意:从编辑器 - 这取决于插件,这是最有可能没有实际使用Perl,但PHP的实现PCRE的。)

Answer 1:

字符串替换可以与匹配一起完成。 由于您使用PHP,使用的preg_replace

$newstring = preg_replace("/(6a00d834.*?)(\")/", "\\1.jpg\\2", $oldstring)

这打破了比赛分成两组,然后插入它们之间的名为.jpg。

对于WordPress的插件的正则表达式 ,使用/(6a00d834.*?)(")/为匹配字符串,然后用\ 1.JPG \ 2替换字符串。



Answer 2:

这是不是工作?

/(6a00d834.*?)"/

编辑:您在您的评论人说你希望更换".jpg" ; 在这种情况下,这个正则表达式可能会工作:

/6a00d834.*?(")/

然而,最好的事情可能是使用我提供的第一正则表达式,并使用替换字符串,看起来像这样:

'\\1.jpg"'

当然, \\1具有与任何你特定的正则表达式引擎使用的用于反向引用来代替。



Answer 3:

你的问题是不完全清楚,但也许你的意思是:

/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不作为一个非贪婪符。



Answer 4:

我假设你要提取后一切6a00d834到先上后下"所以,试试这个:

/6a00d834([^"]*)"/

第一组的比赛将是比你正在寻找的字符串。



Answer 5:

也许使用一组操作?

/6a00d834.*?(")/

然后,根据您正则表达式的API,你可以拉出来是什么原因在括号匹配。

编辑

嗯,你想要做字符串替换。 我将你使用Perl猜测。 尝试这个:

s/(6a00d834.*?)(")/\1.jpg\2/


文章来源: Help with Regex - Wordpress (search-regex)