需要删除未附加到a-zA-Z0-9的任何字符集。例子:
块被认为是任何独立的字符或字符串:
答案 0 :(得分:1)
正则表达式,匹配1个或多个不是触摸有效字符的非字母数字字符。
/(^| )[^a-zA-Z0-9]+( |$)/
PHP用法:
preg_replace('/(^| )[^a-zA-Z0-9]+( |$)/', '$1$2', $item);
注意:在针对您的输入进行操作时,您会注意到一些额外的空格。从技术上讲,这些空间触摸一个有效的角色。
答案 1 :(得分:1)
您可以使用lookarounds。我们可以简单地匹配尽可能多的非单词,非空格字符,然后断言块旁边没有非空格字符:
$output = preg_replace('/(?<!\S)[^a-z\d\s]+(?!\S)/i', '', $input);
请注意,这可能会留下多个空格字符(块的左侧和右侧)。如果您不想这样,最简单的方法是运行第二个替换步骤:
$output = preg_replace('/\s+/', ' ', trim($output));
答案 2 :(得分:1)
在这里,试试这个:
'/(?:(?<=\s)|^)[^a-z0-9]+(?:(?=\s)|$)/i'
基本思想是:使用lookbehind断言我们要么在我们后面有空格,要么在字符串的开头。然后捕获非字母数字字符,并使用前瞻来强制它遵循空格或字符串的结尾。
答案 3 :(得分:0)
这是您需要的
[^a-zA-Z0-9\d\s:]+[^a-zA-Z0-9\d\s:]
这样只会选择任何没有附加到字母数字字符的字母数字字符