【问题标题】:Regular Expression to remove forward slashes from words not numbers in PHP正则表达式从 PHP 中的单词而不是数字中删除正斜杠
【发布时间】:2015-07-14 07:57:27
【问题描述】:

我正在尝试删除分隔单词的正斜杠,但不是 PHP 中的数字。

示例字符串:

"sf/berkeley to paso/slo/sb on 9/25"

我希望我的结果是:

"sf berkeley to paso slo sb on 9/25"

使用"/([a-z]+)\\/(?=[a-z]+)/" 我能够得到: "sf berkeley to paso/slo/sb on 9/25"

我的 PHP 代码:

$re = "/([a-z]+)\\/(?=[a-z]+)/";      
$subst = "$1 ";

$result = preg_replace($re, $subst, $str, 1);

感谢任何帮助!

【问题讨论】:

    标签: php regex


    【解决方案1】:

    你需要使用断言。

    preg_replace('~(?<=[a-z])/(?=[a-z])~i', ' ', $str);
    

    更新:

    您的代码有效,您只需删除最后一个1 参数,这意味着只替换一次。

    $re = "/([a-z]+)\\/(?=[a-z]+)/";      
    $subst = "$1 ";
    
    $result = preg_replace($re, $subst, $str);
    

    你也不需要在[a-z]之后添加+

    DEMO

    【讨论】:

    • 我在发布后立即意识到这一点。显然,是时候停止今晚的节目了。
    • @user1280565:如果你使用你的正则表达式,它不会在行的开头和结尾发现/。我提出了另一个基于preg_replace_callback 的解决方案。
    【解决方案2】:

    你可以使用

    $re = '/^\/|\/$|(?<!\d)(\/)(?!\d)/'; 
    $result = preg_replace_callback($re, function($m) {
        if (count($m[1]) > 0) {
           return " ";
        }
        else {
           return "";
        }
    }, $str);
    echo $result. "\n";
    

    IDEONE demo

    正则表达式 - /^\/|\/$|(?&lt;!\d)(\/)(?!\d)/ - 在字符串的开头或结尾匹配 /,并将它们替换为空字符串,并且还匹配(并捕获只是为了检查 @987654325 的字符串内位置@我们找到了)一个/,只有在它之前((?&lt;!\d))和之后((?!\d))没有数字的情况下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 2021-07-11
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多