Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式删除文本(php)中特定条件的匹配_Php_Regex_Preg Replace - Fatal编程技术网

正则表达式删除文本(php)中特定条件的匹配

正则表达式删除文本(php)中特定条件的匹配,php,regex,preg-replace,Php,Regex,Preg Replace,只有当“.U.”或“.U.”位于字符串本身的末尾时,我才需要一种删除字符串的“U”部分的方法(第一种情况下有空格,第二种情况下没有空格) 我是阿米斯塔德 我是阿米斯塔德。美国 我是芝加哥大学的粉丝 我是尼克斯队的球迷。芝加哥大学 从这4个字符串中,它应该只应用于1和2。因此,每种情况下产生的文本将是: 我是阿米斯塔德 我是阿米斯塔德 我是芝加哥大学的粉丝 我是尼克斯队的球迷。芝加哥大学 我用str_replace()尝试了几种替代方法,但由于上面提到的条件,这必须用regex来完成。有什么想法吗

只有当“.U.”或“.U.”位于字符串本身的末尾时,我才需要一种删除字符串的“U”部分的方法(第一种情况下有空格,第二种情况下没有空格)

  • 我是阿米斯塔德
  • 我是阿米斯塔德。美国
  • 我是芝加哥大学的粉丝
  • 我是尼克斯队的球迷。芝加哥大学
  • 从这4个字符串中,它应该只应用于1和2。因此,每种情况下产生的文本将是:

  • 我是阿米斯塔德
  • 我是阿米斯塔德
  • 我是芝加哥大学的粉丝
  • 我是尼克斯队的球迷。芝加哥大学

  • 我用str_replace()尝试了几种替代方法,但由于上面提到的条件,这必须用regex来完成。有什么想法吗?谢谢

    使用
    $
    将正则表达式锚定到字符串的末尾。
    \s?
    查找可能的空间

    $new_string = preg_replace("/\s?U\.$/", "", $string);
    
    
    $string = "Que tiene amistad. U.";
    $new_string = preg_replace("/\s?U\.$/", "", $string);
    echo $new_string;
    
    // Que tiene amistad.
    
    $string = "Im fan of U. of Chicago.";
    $new_string = preg_replace("/\s?U\.$/", "", $string);
    echo $new_string;
    
    // Im fan of U. of Chicago.
    

    我经常这样回答,但a可能在这里起作用:

    = preg_replace("/(?<=\. |\.)U\.$/", "", $str);
    

    =preg\U replace(“/”(看看函数
    preg\U replace()
    :这个答案应该很全面。但是,由于您特别要求U前面的点,我建议将命令更改为
    preg\U replace(“/。\s?U\.$/”,“,$string))
    @Thilo如果查看OP所需的输出,则
    U
    之前的最后一个
    仍然存在,因此没有被regexp替换。是的,它是。但是,您的表达式也会改变“This is a dummyU”。"。这就是为什么我用圆点替换了整个找到的字符串,但没有删除它。@Thilo用这个字符串尝试正则表达式:“Hola amigos U.”problem@andufo当然。这个借口可能站不住脚,但在第一个点前面应该有一个反斜杠……然而,我的解决方案仍然会删除。和U之间的空格(如果有)-除marios之外的其他解决方案也是如此。为此,增加1。