【问题标题】:pattern should be replaced only when it matches a particular word in the whole string [duplicate]只有当它与整个字符串中的特定单词匹配时才应替换模式[重复]
【发布时间】:2014-01-06 12:41:24
【问题描述】:
$text=" ma mee ma mee meena mia meenaùs";

$text 是一个字符串,包含数百个单词,上面是一个简短的插图。

我想要检查 $text 是否包含'mee',如果是,则将 mee 替换为“”(即空格)。

我正在使用preg_replace,但很明显它会搜索模式mee 并用空格替换它,即使$text 有meena。

简而言之,只有当 $text 值不是 meena 时,我才想要替换。如何使用 PREG_REPLACE 或相关函数来实现这一点? 提前致谢

$text = preg_replace("mee","", $text);

预期输出:“ma ma meena mia meenaùs” 似乎存在一些编码问题,因为它不适用于 meenaùs

【问题讨论】:

  • 应避免使用正则表达式,仅在没有其他合理替代方案时使用。
  • 你考虑过 $foo === $bar 吗?

标签: php


【解决方案1】:
if ($text == "mee")
    $text = " ";

就是这样。

如果您希望多次更改包含此单词的字符串中的单词"mee",请使用$text = preg_replace('/\bmee\b/', ' ', $text);

【讨论】:

  • 这不是我想要的,我想使用 preg_replace 或相关函数来执行此操作
  • 请在您的问题下查看我的评论
  • @user2935196 preg_replace 会比这慢 1000 倍。 AeroX 仍然回答了你想要的(在 imo 中,这不是正确的答案)
  • @user2935196 正则表达式并不是真正适合这项工作的工具。 Thomas 给出的简单比较和替换示例效率更高。
  • 如果 $text 是一个包含数百个单词的字符串会怎样。
【解决方案2】:

作为正则表达式,它将是 ^mee$,您可以将其与 preg_replace 一起使用,如下所示:

$text = preg_replace("/^mee$/","", $text);

^ 匹配字符串的开头
$ 匹配字符串的结尾

这是一个非常简单的替代方法,但是不使用正则表达式可能会更有效。


好的,既然您已经更改了问题,那么新问题的答案将是:

$text = preg_replace("/\bmee\b/","", $text);

这应该与模式mee 匹配,其中它是一个单词,而不是另一个单词的一部分。

【讨论】:

  • 如果 $text 是一个包含数百个单词的字符串会怎样。
  • @user2935196 这需要不同的答案。其正则表达式为\bmee\b,因为\b 匹配单词边界。
【解决方案3】:

您可以选择preg_matchpreg_replace 的组合。

首先检查字符串是否完全匹配:

    <?php
    $text=" ma mee ma mee meena mia";
    echo $text."<br/>";
    $key = "mee";
    $rep_text = "YES";

    $text = preg_replace("/\b".$key."\b/u", $rep_text, $text);
    echo $text."<br/>";

    ?>

试试这个。

【讨论】:

  • 检查一下,我已经编辑了答案,它现在可以工作了......你也可以在这里检查它phptester.net
  • 由于非英语单词而失败,请参阅我更新的问题。
  • 编辑了代码,再试一次:)
猜你喜欢
  • 1970-01-01
  • 2018-05-07
  • 2011-03-26
  • 2018-11-10
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多