Php 我的preg_替换字符串几乎完美,但我有一个小问题

Php 我的preg_替换字符串几乎完美,但我有一个小问题,php,regex,Php,Regex,试着让我的preg_replace语句正常工作,除了一些变体外,大部分情况下都是这样 <?php $string = "10vdc"; if (preg_match("/(^[0-9]+[0-9])+[v | a]/i",$string)) { echo "yes!"; $string = preg_replace("/^[0-9]+[0-9]/","$0 ",$string); } if (preg_match("/[v | a][ac | dc]/i",$string)

试着让我的preg_replace语句正常工作,除了一些变体外,大部分情况下都是这样

<?php
$string = "10vdc";
if (preg_match("/(^[0-9]+[0-9])+[v | a]/i",$string)) {
    echo "yes!";
    $string = preg_replace("/^[0-9]+[0-9]/","$0 ",$string);
}
if (preg_match("/[v | a][ac | dc]/i",$string)) {
    echo "<br>yes2!";
    $string = preg_replace("/([\d | \s][v | a])([ac|dc])/i","$1 $2",$string);
}
echo "<br>";
echo $string;
?>
如果我的字符串是10vdc、10vdc、10vac或10vac,我的正则表达式工作,它应该分别打印10vdc或10vac,但如果我的字符串是10adc、10adc、10aac或10aac,我的echo仅分别返回10adc或10aac。我整个上午都在做教程,我开始掌握这个窍门,但这让我很难受

显然,如果您想尝试,只需更改$string值即可


谢谢你的帮助!你们都很好。

我发现了我的问题。它与or |指示符后面的空格有关

那么什么是: /[\d|\s][v|a][ac|dc]/i

应改为:
/[\d |\s][v | a][ac | dc]/i.

在更换preg|u之前,您真的不需要先进行preg|u匹配。好的,一旦它起作用,我可能会删除pref|u匹配。谢谢