3

我想要一个可以匹配所有数字、字母和所有标点符号的正则表达式(句号、逗号、问号、感叹号、冒号等)。

字符串必须至少有一个字符长,但可以是任何以上的长度。

可能吗?

4

3 回答 3

2

尝试\\p{Graph}+\\p{Print}+

@Test
public void shouldMatch()
{
    assertTrue("asdf123ASFD!@#$%^&*()".matches("\\p{Graph}+"));
}

@Test
public void shouldMatchWithWhitespaces()
{
    assertTrue("asdf 123 ASFD !@#$%^&*()".matches("[\\p{Graph}\\s]+"));
}

您可以在此处获取更多信息(部分:POSIX 字符类(仅限 US-ASCII)):

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

于 2012-12-03T00:02:28.463 回答
1

如果我理解得很好,那应该很容易。请试试:

([^\s]+)

此正则表达式匹配任何字符的一次或多次出现,但不匹配空格。这是匹配(和重用)任何字符串的最简单方法。也许您已经知道括号在正则表达式中的含义。它们用于反向引用,即稍后重用匹配的字符串。

于 2012-12-02T23:59:45.933 回答
1

从查看字符类开始

http://www.regular-expressions.info/charclass.html

一个例子:

[A-Za-z_0-9]*

将匹配任何带有 ascii 标准字母和下划线的内容。

您可以将所需的标点符号添加到集合中。

您可以使用 \w 匹配任何单词字符,并且根据您使用的正则表达式实现,它也可能匹配 unicode 字符。

另一种方法是决定你不想匹配什么。如果要匹配不是空格的字符串,可以使用

\S*
于 2012-12-03T00:02:53.720 回答