我有一个执行搜索替换功能的网络表单。
表单输入通过preg_quote
. 一直很好,直到现在。
现在我想允许用户输入*
(星号)通配符。preg_quote
逃脱它。我怎样才能让它通过并正确应用它?
$find = ',*'; // I want to match a comma and all characters after the comma
$replace = ''; // replace with empty string
$find = preg_quote($find_replace[0],'~'); // $find == ',\*';. I want * to remain unescaped. Is replacing "\*" with "*" the best way?
if(strpos($find,'\\*') !== false) { // UPDATE: I tried that, and it does work.
// $find == ',\*'
$find = str_replace('\\*','*',$find);
// $find == ',*' -- seems like it should work but doesn't
}
$value = trim(preg_replace('~' . $find . '~i',$replace,$value));
编辑:我在上面的代码中添加了在*
. 这是工作。
$value = 'Hey, hey, hey, hey'
我以' '结束Hey hey hey hey
。正如正则表达式模式所预期的那样,所有逗号都被删除,*
(贪婪匹配?)。
请注意,在我的代码中,我将使用$find = str_replace('\\*','.*',$find)
或$find = str_replace('\\*','[\s\S]*',$find)
复制 Microsoft Excel 查找/替换功能。