使用PHP preg_替换此正则表达式

使用PHP preg_替换此正则表达式,php,regex,Php,Regex,我有两条很棒的弦: my\u awesome\u字符串 my\u awesomestring 我试图创建一个函数,如果字符串中有第二个下划线,则可以将第一个下划线转换为/,但如果没有第二个下划线,则可以将其转换为- my/awesome字符串 my awesomestring 你能帮我转换我的很棒的字符串吗?这个示例代码满足了你的要求,我发现它非常简单,因为有一个函数可以计算字符串作为字符串一部分的频率(也可以用char counting函数代替): 此示例代码符合您的要求,我发现它非常简单,因

我有两条很棒的弦:

my\u awesome\u字符串
my\u awesomestring

我试图创建一个函数,如果字符串中有第二个下划线,则可以将第一个下划线转换为
/
,但如果没有第二个下划线,则可以将其转换为
-

my/awesome字符串
my awesomestring


你能帮我转换我的很棒的字符串吗?

这个示例代码满足了你的要求,我发现它非常简单,因为有一个函数可以计算字符串作为字符串一部分的频率(也可以用char counting函数代替):


此示例代码符合您的要求,我发现它非常简单,因为有一个函数可以计算字符串作为字符串一部分的频率(也可以用char counting函数替换):


如果我正确理解了你的问题,类似这样的方法应该行得通:

if( substr_count($str, '_') > 1 ) $str = preg_replace('/_/', '/', $str, 1);
$str = str_replace('_', '-', $str);

如果我正确理解了你的问题,类似这样的方法应该有效:

if( substr_count($str, '_') > 1 ) $str = preg_replace('/_/', '/', $str, 1);
$str = str_replace('_', '-', $str);
另一种方式:

$first = strpos($str, '_');          // find first _
$last = strrpos($str, '_');          // find last _
$str = str_replace('_', '-', $str);  // replace all _ with -
if($first !== $last) {               // more than one _ ?
    $str[$first] = '/';              // replace first with /
}
另一种方式:

$first = strpos($str, '_');          // find first _
$last = strrpos($str, '_');          // find last _
$str = str_replace('_', '-', $str);  // replace all _ with -
if($first !== $last) {               // more than one _ ?
    $str[$first] = '/';              // replace first with /
}

这必须由正则表达式完成吗?或者是别的什么?可以用任何东西做。我的大脑去了regex,但我想这不一定是答案,这必须由regex来完成吗?或者是别的什么?可以用任何东西做。我的大脑去了regex,但我想这不一定是答案,你不能用stru_replace的第三个参数来限制替换的数量。不过,如果能有它就好了,但它不见了;)您使用的
str_replace
错误:第四个参数是一个变量,将为其分配替换数。无法用于控制替换的ා参数,不能使用str_ureplace的第三个参数来限制替换的数量。不过,如果能有它就好了,但它不见了;)您使用的
str_replace
错误:第四个参数是一个变量,将为其分配替换数。它不能用于控制替换的#。我的字符串不会作为数组输入函数,而是一次输入一个。在这种情况下,到底需要改变什么?有什么事吗?对不起,错过了底部的数组映射。我认为费利克斯给出的答案稍微优雅一些,但感谢你向我介绍
substr\u count
@戴夫·基斯:是的,他提出了一个很好的解决方案。我的字符串不会作为数组输入函数,而是一次输入一个。在这种情况下,到底需要改变什么?有什么事吗?对不起,错过了底部的数组映射。我认为费利克斯给出的答案稍微优雅一些,但感谢你向我介绍
substr\u count
@戴夫·基斯:是的,他提出了一个很好的解决方案。