【问题标题】:Regex, PHP - finding words that need correction正则表达式,PHP - 查找需要更正的单词
【发布时间】:2014-06-01 06:02:49
【问题描述】:

我有一长串单词。有些单词有特殊字母。

例如一个字符串“现在$ dolar inp$t 有一个真正的$l 问题” 我有一个特殊的字母“$”。

我需要以最快的方式找到并返回所有带有特殊字母的单词。

我所做的是一个函数,它通过空格解析这个字符串,然后使用“for”遍历所有单词并在每个单词中搜索特殊字符。当它找到它时,它会将它保存在一个数组中。但是有人告诉我,使用正则表达式我可以获得更好的性能,但我不知道如何使用它们来实现它。

最好的方法是什么?

我是 regex 的新手,但我知道它可以帮助我完成这项任务?

我的代码:(禁止是一个常量) 该代码目前有效,仅适用于一个禁止字符。

function findSpecialChar($x){
$special = "";
$exploded = explode(" ", $x);
foreach ($exploded as $word){
   if (strpos($word,$forbidden) !== false)
     $special .= $word; 
}
return $special;
}

【问题讨论】:

  • 我所做的是一个函数,它通过空格解析这个字符串,然后使用“for”遍历所有单词并在每个单词中搜索特殊字符。当它找到它时 - 它将它保存在一个数组中。但有人告诉我,使用正则表达式我可以获得更好的性能,但我不知道如何使用它们来实现它
  • 您当前的解决方案需要多长时间?
  • 把你拥有的所有信息都放在问题中。
  • 您至少需要发布一些示例输入数据和您尝试过的一些代码。但如果你不这样做,它会很快被关闭。
  • Wiz - 现在不需要太多,因为我在一个小的输入上运行它。它稍后会在一些巨大的东西上运行,我被告知正则表达式的性能比使用 for 和解析要好得多。对吗?

标签: php regex


【解决方案1】:

你可以像这样使用preg_match

// Set your special word here.
$special_word = "café";

// Set your sentence here.
$string = "I like to eat food at a café and then read a magazine.";

// Run it through 'preg_match''.
preg_match("/(?:\W|^)(\Q$special_word\E)(?:\W|$)/i", $string, $matches);

// Dump the results to see it working.
echo '<pre>';
print_r($matches);
echo '</pre>';

输出将是:

Array
(
    [0] =>  café
    [1] => café
)

如果你想替换它,你可以使用preg_replace

// Set your special word here.
$special_word = "café";

// Set your special word here.
$special_word_replacement = " restaurant ";

// Set your sentence here.
$string = "I like to eat food at a café and then read a magazine.";

// Run it through 'preg_replace''.
$new_string = preg_replace("/(?:\W|^)(\Q$special_word\E)(?:\W|$)/i", $special_word_replacement, $string);

// Echo the results.
echo $new_string;

而输出将是:

我喜欢在餐馆吃饭,然后看杂志。

我确信可以改进正则表达式以避免必须在 " restaurant " 之前和之后添加空格,就像我在此示例中所做的那样,但这是我相信您正在寻找的基本概念。

【讨论】:

  • 谢谢。如果我有多个我要寻找的特殊字符,我该怎么办?最初的问题是我正在寻找被破坏的单词,而不是字母,不同的字符,如 %、@、* ?和类似的东西
  • @Alex 问题是你没有给任何人任何你需要解析的数据。所以我 100% 不知道如何帮助你。这是我能做的最好的,现在要说再见了!你只是不能玩,“现在怎么样......”你需要清楚地给人们提供工作的东西。再见!
  • 什么意思?我发布了我需要在示例中使用美元的数据......这就是我所拥有的 - 损坏的字符串,我的工作是找到损坏的单词。
  • 感谢您的回答,这有助于理解这个概念
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 2022-08-18
  • 2011-04-17
  • 2016-12-07
  • 1970-01-01
  • 2022-07-14
相关资源
最近更新 更多