php - 正则表达式匹配任何空格

标签 php regex

我想使用正则表达式和 preg_replace 函数进行替换。这是我的代码

$verif = "/wordA(\s*)wordB(?! wordc)/i";
$replacement = 'wordA wordb wordc';
$newvar = preg_replace($verif, $replacement, $article->text);

只要在 wordA 和 wordB 之间有一个空格就可以了。 我需要匹配 wordA 和 wordB 之间的空格数量。

示例:

wordA (10 or more whitespace) wordB -> wordA wordb wordc same wordA(1 whitespace) wordB -> wordA wordb wordc ...

最佳答案

您的正则表达式应该“按原样”工作。假设它正在做你想做的事。

wordA(\s*)wordB(?! wordc)

这意味着匹配 wordA后跟 0 个或多个空格,后跟 wordB ,但如果后跟 wordc,则不匹配 。请注意 ?! 之间的单个空格和wordc这意味着 wordA wordB wordc不会匹配,但是wordA wordB wordc会的。

以下是一些示例匹配和相关的替换输出:

enter image description here

请注意,无论有多少空格,所有匹配项都会被替换。还有其他几点:-

  • (?! wordc)是负向前瞻,因此您不会匹配行 wordA wordB wordc这是假设的目的(也是最后一行不匹配的原因)。目前您依赖于 ?! 之后的空间以匹配空白。您可能想要更精确并使用 (?!\swordc) 。如果你想在 wordc 之前匹配多个空格,你可以使用 (?!\s*wordc) 0 个或多个空格或 (?!\s*+wordc) 1 个或多个空间,具体取决于您的意图。 当然,如果您确实想在 wordB 之后匹配带有 wordc 的行,那么您不应该使用否定前瞻。

  • *将匹配 0 个或多个空格,因此它将匹配 wordAwordB。您可能需要考虑+如果您想要至少一个空间。

  • (\s*) - 括号表示捕获组。您是否出于某种原因将空白捕获到组中?如果没有,您可以删除括号,即只需使用 \s

根据评论更新

Hello the problem is not the expression but the HTML out put   that are not considered as whitespace. it's a Joomla website.

保留您可以使用的原始正则表达式:

wordA((?:\s| )*)wordB(?!(?:\s| )wordc)

唯一的区别是正则表达式不匹配空格或   。我替换了wordc\swordc因为这更明确。请注意,我已经指出了负向前瞻 ?!当 wordB 后面跟着一个空格和 wordc 时,将匹配。如果您想匹配多个空格,请参阅我上面的评论。我还保留了空白周围的捕获组,如果您不想要这样,请按照上面所述删除括号。

匹配示例:

enter image description here

关于php - 正则表达式匹配任何空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21974376/

相关文章:

php - 安装 Symfony2

php - MySQL 声明 PHPMyADMIN

尝试使用 Volley 更新数据库时出现 Php 错误

php - 为什么我的标题中有两个 session ID?

java - 正则表达式 (java) 在单词之后只有空格或行尾

regex - 计算字符串中逗号个数的正则表达式

c - 正则表达式教程或书籍

php - 如何在 PHP 中禁用 'e' PREG_REPLACE_EVAL 修饰符?

用于匹配来自记录器的异常堆栈跟踪的 Java 正则表达式

字符串的正则表达式结尾不起作用