正则表达式匹配一组字符,但排除某些字符

3

我相信这个问题以前已经被问过了,但我似乎找不到它(或者不知道正确的搜索词)。

基本上,我想要一个正则表达式,它匹配除连字符外的所有非字母数字字符。所以基本上是匹配 \W+ 但要排除 '-'。我不知道如何从预制的集合中排除特定字符。

4个回答

8

\W[^\w] 的简写。因此:

[^\w-]+

一些背景知识:

  • […] 定义了一个集合
  • [^…] 否定一个集合
  • 通常情况下,每个小写字母 \v 集合都可以通过大写字母 \V(其中 V 是定义集合的任何字母)来否定。
  • 对于国际字符,您可能需要查看 [[:alpha:]][[:alnum:]]

1

您可以使用:

[^a-zA-Z0-9_-]

或者

[^\w-]

匹配单个非连字符、非字母数字字符。要匹配一个或多个,请在前面加上+


缺少下划线(以及许多带重音的字符,如果它的正则表达式版本将像 ä、ß 或 à 这样的字符视为 \w 的一部分)... - Tim Pietzcker

1
[^\w-]+

将做到这一点。匹配除连字符以外不属于\w集合的任何字符。


0
在Java7或以上版本中,您需要在正则表达式中添加(?U)以匹配所有特定于语言环境的字符。例如:
(?U)[^\w-]

在Java字符串中(需要用另一个字符\转义):
(?U)[^\\w-]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接