Php 多次调用preg_replace更改结果

Php 多次调用preg_replace更改结果,php,regex,preg-replace,Php,Regex,Preg Replace,我有一堆以某种标准格式命名的文件。标准形式基本上是这样的: [整数]\u字1\u字2\u字3\u_一个单词可以是任何东西,但所有单词都用下划线分隔 我只想对文本做3件事: 1.)我想修改整数,它总是在开头,所以像“200”这样的东西会变成$200.00 2.)将任何形式的“词语”替换为“,”替换为“,”w/”,或将“w/”替换为“with” 3.)用空格替换所有下划线 我写了三个不同的preg_replace调用来实现这个技巧。详情如下: 1.$filename=preg_replace(“/(

我有一堆以某种标准格式命名的文件。标准形式基本上是这样的:

[整数]\u字1\u字2\u字3\u_一个单词可以是任何东西,但所有单词都用下划线分隔

我只想对文本做3件事:

1.)我想修改整数,它总是在开头,所以像“200”这样的东西会变成$200.00

2.)将任何形式的“词语”替换为“,”替换为“,”w/”,或将“w/”替换为“with”

3.)用空格替换所有下划线

我写了三个不同的preg_replace调用来实现这个技巧。详情如下:

1.
$filename=preg_replace(“/(^[0-9]+)/”、“$$1.00”、$filename)

2.
$filename=preg_替换(“/”([wW]|[wW]ith)/“,“with”,$filename)

3.
$filename=preg\u replace(“/”,“,$filename”)

每次更换在单独运行时都能按预期工作,但当三次都运行时,第二次更换将被忽略。为什么会发生这样的事情

谢谢你的帮助

更新:

以下是我正在使用的实际代码:

$path = "./img";
$dir_handle = @opendir($path);
while ($file = readdir($dir_handle)) {
    if ($file != "." && $file != "..") {
        $id = preg_replace("/\.jpg/","",$file);
        $id = preg_replace("/(^[0-9]+)/","$ $1.00", $id);
        $id = preg_replace("/_([wW]\/|[wW]ith)_/"," with ", $id);
        $id = preg_replace("/_/"," ", $id);
        echo "<a href='javascript:show(\"img/$file\")'>$id</a> <br/>";
    }
}
closedir($dir_handle);
$path=“/img”;
$dir_handle=@opendir($path);
而($file=readdir($dir\u handle)){
如果($file!=“&&&$file!=”){
$id=preg\u replace(“/\.jpg/”,“”,$file);
$id=preg_replace(“/(^[0-9]+)/”、“$$1.00”、$id);
$id=preg\u replace(“/”([wW]\/[wW]ith)\/”,带“,$id”);
$id=preg\u replace(“/”、“”、$id);
回声“
”; } } closedir($dir_handle);
如果第一次替换删除了第二次替换匹配的文本,则可能会发生类似的情况。但我不认为这就是这里发生的事情。我想你只是在第二次替换中出错了。看起来您缺少了
/

$filename = preg_replace("/_([wW]\/|[wW]ith)_/"," with ", $filename);
在这一变化之后,它似乎运行良好:

$filename = "200_word1_w/_word2";
$filename = preg_replace("/(^[0-9]+)/","$ $1.00", $filename);
$filename = preg_replace("/_([wW]\/|[wW]ith)_/"," with ", $filename);
$filename = preg_replace("/_/"," ", $filename);
print_r($filename);
结果:

$ 200.00 word1 with word2 $200.00 word1和word2
对我来说很好。你能发布更多的代码,和一个不起作用的文本的例子吗?我实际上注意到我认为是“w/”的东西实际上只是没有斜杠的“w”。这就是为什么它以前是有效的。。。但是在我复制并粘贴了你的代码,并删除了“\/”之后,它成功了!我不知道为什么。