Joh*_*ley 2 java regex regexbuddy
我需要创建一个允许字符串包含任意数量的正则表达式:
不允许使用其他字符.我使用RegexBuddy来构造以下正则表达式,当我在RegexBuddy中测试它时,它正常工作:
\w* *\(*\)*&*\.*
Run Code Online (Sandbox Code Playgroud)
然后我使用RegexBuddy的"使用"功能将其转换为Java代码,但使用简单的测试程序似乎无法正常工作:
public class RegexTest
{
public static void main(String[] args)
{
String test = "(AT) & (T)."; // Should be valid
System.out.println("Test string matches: "
+ test.matches("\\w* *\\(*\\)*&*\\.*")); // Outputs false
}
}
Run Code Online (Sandbox Code Playgroud)
Ill*_*ril 13
正则表达式测试任何数量的空格,后跟任意数量的字母数字字符,然后是任意数量的空白数据,接着是任意数量的紧密数据,然后是任意数量的&符号,然后是任意数量的句点.
你想要的是......
test.matches("[\\w \\(\\)&\\.]*")
Run Code Online (Sandbox Code Playgroud)
正如mmyers所提到的,这允许空字符串.如果你不想允许空字符串......
test.matches("[\\w \\(\\)&\\.]+")
Run Code Online (Sandbox Code Playgroud)
虽然这也允许一个只有空格的字符串,或者只包含句点等.如果你想确保至少有一个字母数字字符......
test.matches("[\\w \\(\\)&\\.]*\\w+[\\w \\(\\)&\\.]*")
Run Code Online (Sandbox Code Playgroud)
所以你理解正则表达式的含义......方括号内的任何内容("[]")表示一组字符.因此,"a*"表示0或更多a,[abc]*表示0或更多字符,所有字符都是a,b或c.