php – 正则表达式帮助:如何匹配包含“或”运算符的正则表达式中的任一模式?

开发技术 作者: 2024-07-02 03:20:01
我正在使用php的preg_replace(). 基本上我有两种可能的字符串匹配: >你好真实世界 >问候 这是我想要完成的事情: >你好< / span>真实世界 >格力< / span> tings 规则解释:如果字符串包含空格,请插入< / span>在第一个空格字符之后.如果字符串不包含空格(单词),请插入< / span>在字符串的中间(/ – 如果奇数字符计数). 到目前为止,我已经提
我正在使用PHP的preg_replace().

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

>你好真实世界
>问候

这是我想要完成的事情:

>你好< / span>真实世界
>格力< / span> tings

规则解释:如果字符串包含空格,请插入< / span>在第一个空格字符之后.如果字符串不包含空格(单词),请插入< / span>在字符串的中间(/ – 如果奇数字符计数).

到目前为止,我已经提出了一个长期工作的解决方案:

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

但是,我相信只需要一个preg_replace()调用就可以实现更短更优雅的正则表达式.

任何想法如何只使用单个preg_replace()调用?例如.:

preg_replace("/ |.{" . round(strlen($str)/2) . "}/",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);
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_37067.html