Php 正则表达式帮助:如何仅匹配包含“";或;操作人员

Php 正则表达式帮助:如何仅匹配包含“";或;操作人员,php,regex,preg-replace,Php,Regex,Preg Replace,我正在使用php的preg\u replace() 基本上,我有两种可能的字符串匹配: 你好,现实世界 问候 以下是我希望实现的目标: Hello Real World 问候语 规则说明:如果字符串包含空格,请在第一个空格字符后插入。如果字符串不包含空格(一个单词),请在字符串的中间(+/-If奇数字符计数)插入 到目前为止,我提出了一个长期有效的解决方案: <?php $str = "Hello Real World"; echo preg_match("/ /", $str) ? p

我正在使用php的
preg\u replace()

基本上,我有两种可能的字符串匹配:

  • 你好,现实世界
  • 问候
  • 以下是我希望实现的目标:

  • Hello Real World
  • 问候语
  • 规则说明:如果字符串包含空格,请在第一个空格字符后插入
    。如果字符串不包含空格(一个单词),请在字符串的中间(+/-If奇数字符计数)插入

    到目前为止,我提出了一个长期有效的解决方案:

    <?php 
    $str = "Hello Real World";
    echo preg_match("/ /", $str) ? preg_replace("/ /", " </span>", $str, 1) : preg_replace("/.{" . round(strlen($str)/2) . "}/", "$0</span>", $str, 1);
    ?>
    

    正则表达式引擎不会提前知道字符串中是否有空格。您根本不需要正则表达式来实现这一点,尽管您确实需要多个函数:

    $pos = strpos($str, ' ');
    if ($pos === false) {
       //No space found
       $pos = intval(strlen($str) / 2);
    }
    else {
       //we want to insert *after* the space
       $pos++;
    }
    $str = substr_replace($str, '</span>', $pos, 0);
    
    $pos=strpos($str,”);
    如果($pos==false){
    //找不到空间
    $pos=intval(strlen$str)/2;
    }
    否则{
    //我们想在空格后插入*
    $pos++;
    }
    $str=substr\u replace($str,,$pos,0);
    
    不,没有一种简洁优雅的方式来完成你的想法。正则表达式不是一个可以在字符串上执行无限壮举的神奇工具

    我建议的一件事是不要到处使用正则表达式,因为不需要正则表达式来找到空间

    echo strpos( ' ', $str ) === FALSE
        ? str_replace ( ' ', '</span>', $str, 1 ) /* Only replace 1 occurrence */
        : preg_replace("/.{" . round(strlen($str)/2) . "}/", "$0</span>", $str, 1);
    
    echo strpos(“”,$str)==FALSE
    ? str_replace('',$str,1)/*仅替换1次*/
    :preg_replace(“/.{”.round(strlen($str)/2)。“}/”、“$0”、$str,1);
    

    例如,“如果您不需要复杂的替换规则(如正则表达式),则应始终使用此函数而不是preg_replace()”

    谢谢!这就是我最后使用的:
    echo substr\u replace($str',,(strpos($str',)==false?intval(strlen($str)/3):strpos($str',),0)因为我真的需要一行程序。好吧,但请注意,您最后会调用
    strpos
    两次
    echo strpos( ' ', $str ) === FALSE
        ? str_replace ( ' ', '</span>', $str, 1 ) /* Only replace 1 occurrence */
        : preg_replace("/.{" . round(strlen($str)/2) . "}/", "$0</span>", $str, 1);