1

任何未附加到 a-zA-Z0-9 的字符集都需要删除。例子:

  • 这很棒!(在这儿无事可做)
  • 是的,这样也行!?(在这儿无事可做)
  • 这是 !!!不是很好。!!!!!!-->这个,不太好。(检测到的块)
  • 太浪费时间了……对吧?-->太浪费时间了吧?(检测到的块)
  • ....{{..... 块在开始-->块在开始(检测到块)
  • 块在末尾 [[]] -->块在末尾(检测到块)
  • 你好朋友.....?你好吗 [}}}}}} -->你好朋友.....?你好吗 (检测到块)

块被认为是任何独立的字符或字符串,它们是:

  • 不同于a-zA-Z0-9
  • 在任何位置(开始,中间,结束)
  • 不以任何方式接触任何字母数字字符
4

4 回答 4

1

你可以使用lookarounds。我们可以简单地匹配尽可能多的非单词、非空格字符,然后断言块旁边没有非空格字符:

$output = preg_replace('/(?<!\S)[^a-z\d\s]+(?!\S)/i', '', $input);

请注意,这可能会留下多个空白字符(块的左侧和右侧的字符)。如果您不希望这样,运行第二个替换步骤可能是最简单的:

$output = preg_replace('/\s+/', ' ', trim($output));
于 2012-11-17T00:04:17.567 回答
1

匹配 1 个或多个不涉及有效字符的非字母数字字符正则表达式。

/(^| )[^a-zA-Z0-9]+( |$)/

PHP 用法:

preg_replace('/(^| )[^a-zA-Z0-9]+( |$)/', '$1$2', $item);

注意:在针对输入运行时,您会注意到一些额外的空格。从技术上讲,这些空格正在触及有效字符。

于 2012-11-16T23:38:22.480 回答
1

在这里,试试这个:

'/(?:(?<=\s)|^)[^a-z0-9]+(?:(?=\s)|$)/i'

http://codepad.org/2JZLHdhL

基本思想是:使用向后看来断言我们后面有空格,或者在字符串的开头。然后捕获非字母数字字符,并使用前瞻来强制它后面是空格或字符串的结尾。

于 2012-11-17T01:30:36.920 回答
0

这就是你需要的

[^a-zA-Z0-9\d\s:]+[^a-zA-Z0-9\d\s:]

这只会拾取任何未附加到字母数字字符的非字母数字字符

于 2012-11-17T00:04:00.033 回答