当前位置: 首页 > 知识库问答 >
问题:

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

夏星阑
2023-03-14

我正在使用php的preg_replace()

基本上我有2个字符串匹配的可能性:

  1. 你好,现实世界

以下是我希望完成的:

  1. 你好

规则说明:如果字符串包含空格,则插入

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

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

但是,我相信,只需一个preg\u replace()调用,就可以用一个更短、更优雅的正则表达式来完成。

任何想法如何做到这一点只有一个preg_replace()调用?例如:

preg_replace("/ |.{" . round(strlen($str)/2) . "}/", "$0</span>", $str, 1)

共有2个答案

章光华
2023-03-14

不,没有一种简洁优雅的方式来做你想做的事。正则表达式不是一个可以在字符串上执行无限壮举的神奇工具。

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

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

就像str_replace的文档所说的那样,“如果您不需要复杂的替换规则(如正则表达式),您应该始终使用此函数而不是preg_replace()

霍浩皛
2023-03-14

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

$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);
 类似资料:
  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 问题内容: 这可能是一个愚蠢的问题,但我在任何地方都找不到: 如何在不带括号的情况下使用Java OR正则表达式运算符(|)? 例如:电话|电话|传真 问题答案: 您可以单独使用管道: 例如: 输出: 使用括号的主要原因是要限制替代方法的范围: 具有相同的输出。但是,如果您只是这样做: 你得到: 因为您说过“ string1”或“ 2”。 如果您不想捕获表达式的那一部分,请使用:

  • 说到正则表达式,我没那么令人印象深刻。。。 我试图匹配一个单词中除第二个字符外的所有字符。 我想匹配 示例字符串: 我提出了以下两个正则表达式。 除第一个字符外,此字符与“uml”匹配( -- 这与第一个字符匹配,除了最后3个(uml)

  • 我们得到了一些这样的内容:

  • 有没有一种方法可以在python中编写与以下格式的字符串匹配的正则表达式: 或 在这里,$=表示零或更多的空白可以存在 :来自字符串的固定子集的字符串['feat','fix','docs','断'] :最大长度为n的字符串 :最大长度为m的字符串 前缀应该始终是一个字符串,之后是一些最大q长度的字母数字字符 注意:我们不能省略像应该使用与下面示例中所示完全相同的格式: feat(feat new

  • 主要内容:基本模式匹配,字符簇,确定重复出现基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: 这个模式包含一个特殊的字符 ^,表示该模式只匹配那些以 once 开头的字符串。例如该模式与字符串 "once upon a time" 匹配,与 "There once was