0

正規表現に精通していないため、preg_replaceで問題が発生しています。

このツールを使用してテストしていますが、置換が期待どおりに機能していません。

私はこの入力を持っています:http://example.com/test-menu/d/C101。私はこの出力を期待しています:http://example.com/test-menu/d/101。文字を削除したいだけですC

d任意の英数字を使用できます)

この正規表現を使用しようとしています。

サイトが生成しているphpは次のとおりです。

<?php 
    $ptn = "/\/test-menu\/(.)\/C/";
    $str = "http://example.com/test-menu/d/C101";
    $rpltxt = "/test-menu/$1";
    echo preg_replace($ptn, $rpltxt, $str);
?>

正規表現と一致しません。ここで何が欠けていますか?

4

2 に答える 2

2

主な問題は、$rpltxtの呼び出しの前にの変数が展開されていたことpreg_replace()です。

また、数字のキャプチャを最後に追加し、最初のキャプチャを英字に固有のものにしました。パターンをできるだけ具体的にすることは常に良いことです。

<?php 
$ptn = "#/test-menu/([a-zA-Z])/C(\d+)#";
$str = "http://example.com/test-menu/d/C101";
$rpltxt = '/test-menu/$1/$2';
echo preg_replace($ptn, $rpltxt, $str);

更新:cbuckleyよりきれいなコメントごとに正規表現の区切り文字を変更しました。

于 2012-11-08T23:50:00.327 に答える
2

また:

$ptn = '/(?<=\/test-menu\/.\/)C/';
$rpltext = '';

(これは前向きな後読みを使用します(?<= ... )

または:

$ptn = '/(\/test-menu\/.\/)C/';
$rpltext = '$1';

(これは、Cを除くすべての最初のサブマッチで先行する文字列全体をキャプチャします)

于 2012-11-08T23:50:10.993 に答える