正则表达式,PHP - 找到需要纠正的单词

时间:2014-06-01 06:02:49

标签: php regex

我有一个带字的长字符串。有些单词有特殊字母。

例如一个字符串"现在有一个rea $ l问题,$ dolar inp $ t" 我有一封特别的信" $"。

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

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

最好的方法是什么?

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

我的代码:( forbiden是一个const) 该代码目前适用,仅适用于一个禁用的字符。

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

1 个答案:

答案 0 :(得分:0)

您可以像这样使用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 "之前和之后添加空格,就像我在这个例子中一样,但这是我相信你正在寻找的基本概念。