正则表达式:匹配所有特殊字符但不匹配*

时间:2016-02-13 17:11:39

标签: regex

另一个关于正则表达式的问题。

我尝试匹配所有特殊字符,但' *'。

所以,如果我匹配我的正则表达式:

John%%%* dadidou

我应该得到:

John* dadidou

此处:How to match with regex all special chars except "-" in PHP?

接受的答案建议使用(如果我想排除' - '):

[^\w-]

但这并不意味着:"不是特殊字符,不是 - ",这有点多余?

2 个答案:

答案 0 :(得分:4)

你真正想要的是匹配的正则表达式:

[^\w\s*]+

用空字符串替换它。

这意味着匹配以下任何字符中的1个或多个:

  1. 不是字符[AND]
  2. 不是空格[AND]
  3. 不是文字*
  4. RegEx Demo

答案 1 :(得分:2)

当您定义否定字符类时,您实际上正在反转它。

这是什么意思?

正面的字符类隐含 OR 它的内容。

当你否定一个类时,你隐含地 AND 它的内容。

因此,[\w-]表示word OR dash
反之,[^\w-]表示not word AND not dash

例如,否定词[^\w]会匹配短划线- 因此,要匹配它,您还必须添加not dash

C类比将是

现有(varA || varB)
倒置(!varA && !varB)

其中,反转会更改每个组件的布尔值。

基本上,负类会更改其每个组件的布尔值,
所以隐含的 OR 变成隐式 AND 和组件字符
(或表达式)否定

以后真正烘烤面条的是你看到的东西 [^\S\r\n]

这转换为NOT-NOT-Whitespace NOT-cr NOT-lf
它减少到匹配所有空格除了 CR,LF