4

RE を使用した最初の試みで行き詰まりました。Search-Regex プラグインを介して Wordpress Web サイトで正規表現を使用しており、多数の 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

上記の例では、3 つのターゲットがあります。

6a00d8345233fa69e201157155a6fc970c-pi"
6a00d8345233fa69e201157155a6fc970c"
6a00d8345233fa69e201157155a6fc970c-800wi"

私が使用している正規表現は、それらを見つけることですが、文字列全体ではなく/6a00d834.*?"/末尾でのみ一致させたいです。"これらはファイル拡張子が欠落している画像なので、末尾の「.jpg」を置き換える必要があります。式の置換部分は理解しています。初期の一致に問題があります。

私はこれら (221) の束を持っています。すべてのターゲットはすべて で始まり、6a00d834ランダムな英数字で終わります。"

洞察力に感謝します。ありがとう。

OPのコメントから追加された編集:実際にはプラグイン(REGEX)を使用してSQL内のデータを照会および置換するWordpressサイトにあります。Perl と互換性のある任意の正規表現を使用できます。(編集者からのメモ - プラグインによっては、実際には Perl を使用するのではなく、PHP の PCRE 実装を使用している可能性が高いです。)

4

5 に答える 5

4

文字列の置換は、マッチングとともに行うことができます。PHP を使用しているため、preg_replaceを使用します。

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

これにより、一致が 2 つのグループに分割され、その間に「.jpg」が挿入されます。

wordpress regex pluginの場合、一致文字列に /(6a00d834.*?)(")/ を使用し、置換文字列に \1.jpg\2 を使用します。

于 2009-08-01T14:16:26.950 に答える
2

これはうまくいきませんか?

/(6a00d834.*?)"/

編集:"コメントの 1 つで、を.jpg";に置き換えたいと言っていました。その場合、この正規表現はおそらくうまくいくでしょう:

/6a00d834.*?(")/

ただし、おそらく最善の方法は、最初に提供した正規表現を使用し、次のような置換文字列を使用することです。

'\\1.jpg"'

もちろん、\\1特定の正規表現エンジンが後方参照に使用するものに置き換える必要があります。

于 2009-08-01T13:38:26.110 に答える
1

あなたの質問は完全に明確ではありませんが、おそらくあなたは次のことを意味します:

/ 6a00d834 [^ "] *" /

(つまり、6a00d834に一致し、その後に「が後に続く」ではない0個以上の文字が続く)

または、使用している正規表現エンジンで使用できる場合は、欲張りでない指定子を使用して「*」メタ文字を制限できます。正規表現に関する質問は、使用しているエンジンによって異なることに注意してください。例えば:

$猫の入力
6a00384foo"もっと"
$ perl -ne'/(6a00384 [^ "] *")/; 印刷"$1 \n"'入力
6a00384foo」
$ perl -ne'/(6a00384.*?")/; print "$ 1 \ n"' input
6a00384foo」
$ sed's / \(6a00384 [^ "] *" \)。* / \1/'入力
6a00384foo」
$ sed's / \(6a00384。*? "\)。* / \1/'入力
6a00384foo"もっと"

'?'に注意してください sedでは貪欲でない指定子としては機能しません。

于 2009-08-01T13:43:59.570 に答える
0

6a00d834私はあなたが最初の次のまでの後にすべてを抽出したいと思います"。だからこれを試してみてください:

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

最初のグループ化の一致は、探している文字列よりも多くなります。

于 2009-08-01T13:46:58.070 に答える
0

おそらくグループ演算子を使用しますか?

/6a00d834.*?(")/

次に、正規表現 API に応じて、括弧で一致したものだけを引き出すことができます。

編集

ああ、あなたは文字列の置換をしたいです。Perlを使用していると思います。これを試して:

s/(6a00d834.*?)(")/\1.jpg\2/
于 2009-08-01T13:36:21.200 に答える