Regex问题,用span php将字符串括起来 foreach($ignoreWords作为$ignoreWord){ if(preg_match(“/([^\w^\]\\\\\(\w+\')?)?(“.preg_quote($ignoreWord)。”(\'s)?(\\\[^\w^\])?/”,$string)){ $replacement=''.$ignoreWord'; $pattern=“/(\\\;(\w+\'?)?(“.preg\u quote($ignoreWord)。”)(\)?/”; $result=preg_replace($pattern,$replacement,$string); $stringArray[$key]=$result; } }

Regex问题,用span php将字符串括起来 foreach($ignoreWords作为$ignoreWord){ if(preg_match(“/([^\w^\]\\\\\(\w+\')?)?(“.preg_quote($ignoreWord)。”(\'s)?(\\\[^\w^\])?/”,$string)){ $replacement=''.$ignoreWord'; $pattern=“/(\\\;(\w+\'?)?(“.preg\u quote($ignoreWord)。”)(\)?/”; $result=preg_replace($pattern,$replacement,$string); $stringArray[$key]=$result; } },php,regex,Php,Regex,这里的模式是regex,它包含ignoreWord变量$ignoreWord值,在名为$string的段落中具有span。假设此处$ignoreWord是问题,那么: 问题 “问题” “问题” 问题 def'问题 `问题` (问题) [问题] {Question} 问题(问题后可以出现任何标签) 问题(任何标记都可以出现在问题之前) 问题: 问题 问题, @Question(这里除了@it可以是任何特殊字符) 在找到所有这些“问题”后,我想将它们附在下面: Question。此处仅应在“Ques

这里的模式是regex,它包含ignoreWord变量$ignoreWord值,在名为$string的段落中具有span。假设此处$ignoreWord是问题,那么:

  • 问题
  • “问题”
  • “问题”
  • 问题
  • def'问题
  • `问题`
  • (问题)
  • [问题]
  • {Question}
  • 问题

    (问题后可以出现任何标签)

  • 问题(任何标记都可以出现在问题之前)
  • 问题:
  • 问题
  • 问题,
  • @Question(这里除了@it可以是任何特殊字符)
  • 在找到所有这些“问题”后,我想将它们附在下面:
    Question
    。此处仅应在“Question”一词周围加上附件。它不应改变该词或其以外的含义…或删除其周围的任何字符

    我希望上面代码中的大多数情况都得到了满足,但有些情况仍然存在下面提到的问题

    • 它将abc替换为abcs,在这种情况下,span标记只应包含abc,不应进行替换,原始文本应保持原样

    • 如果找到abcdef,则在单词内部应用替换,替换应用于abcdef字符串的abc部分……如果abc的任一侧有任何字符,则不应应用附件

    • 它还取代了abc def中的abc…这不需要发生。在这种情况下也不应使用机柜

    应该对上述代码进行哪些更改,以使上述情况也得到满足?

    您似乎希望

    foreach ($ignoreWords as $ignoreWord) {
        if (preg_match("/([^\w^\ ]|\<\w+\>|(\w+\'?))?(" . preg_quote($ignoreWord) . "(\'s)?)(\<\/\w+\>|[^\w^\ ])?/", $string)) {
            $replacement = '<span class="clsIgnoreWord">' . $ignoreWord . '</span>';
            $pattern = "/(\<br\/?\>|(\w+\'?))?(".preg_quote($ignoreWord).")(\<br\/?\>)?/";
            $result = preg_replace($pattern, $replacement, $string);
            $stringArray[$key] = $result;
        }
    }
    
    $pattern=“/\b”(.$ignoreWord.)\b/i”;
    $replacement=''$无知的词;
    $result=preg_replace($pattern,$replacement,$string);
    


    这里的键是
    \b
    。单词边界是“单词字符”和“非单词字符”(包括字符串的开头和结尾、
    ^
    $
    )之间发生的零宽度匹配。什么算作“单词字符”取决于当前的语言环境,但我认为标点符号永远不会。你能提供可能的输入数据和预期结果的列表吗?我真的不明白abc的会发生什么。你说它用abc取代abc,但你的代码没有这样做。你应该澄清这一点。这不是在单个“问题-答案”单词中检测“问题”字符串。这不应该发生…@BhaveshTilvani当然它在“问题-答案”中检测“问题”。请看我链接到的网站。如果它没有在代码中检测到该字符串,则会发生其他情况。为您给出的示例提供预期结果如何?我知道它正在检测…并且您的代码也在根据该结果进行反映…但我不希望对该案例进行详细说明…因此,您是否可以更新正则表达式以仅忽略该案例…@BhaveshTilvani我将再次询问,也是最后一次。请编辑您的问题,包括两个列表:“我有这个”和“我想要这个”。举出你能想到的所有例子。“问题-答案”现在不在你的问题中,你不能指望人们在没有你帮助的情况下找到答案。包括这两个列表,我们可以从那里解决问题。Zalewski。我想要的是标记为粗体的15个案例……下面我提到了我在正则表达式中不想要的点……我已经在代码中提到了,被称为15个粗体点……我想要的是现有正则表达式中提到的15个下面的15个案例的要点…仍然需要一些编辑…然后欢迎建议。。。。。
    $pattern = "/\b(".$ignoreWord.")\b/i";
    $replacement = '<span class="clsIgnoreWord">' . $ignoreWord . '</span>';
    $result = preg_replace($pattern, $replacement, $string);