我有一个带字的长字符串。有些单词有特殊字母。
例如一个字符串"现在有一个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;
}
答案 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 "
之前和之后添加空格,就像我在这个例子中一样,但这是我相信你正在寻找的基本概念。