用于检查模式是否存在的Java正则表达式

时间:2012-10-25 16:04:23

标签: java regex

我正在尝试查找字符串中是否存在模式。

我想检查的模式是:

  

以空格或“#”开头的字符串,
  然后使用特定字符串“value1”,后跟空格或制表符,
  然后是“value2”,再次是空格或制表符,
  以“value3”结尾。


这里有一个要检查的示例字符串:

String str = "#  value1   values2 value3";

我尝试了以下正则表达式,但它不起作用:

str.matches("^\\s+#\\s+value1\\s+value2\\s+value3");

以上模式总是返回false。请帮助正则表达。 任何帮助都将非常感激。

3 个答案:

答案 0 :(得分:4)

试试这个: -

str.matches("^[ #]value1\\s+value2\\s+value3$");

[ #] - 匹配空格或#

\\s+ - 匹配1个或多个空格。因此,它会匹配空格或制表符

注意: - 您的字符串中有values2而不是value2

此外,您发布的示例字符串在开始时同时包含space#。但是你说字符串以space#开头。因此,它会匹配您的字符串,如果您在第一个#之后删除该空格,或者在您的空格之前删除#,这取决于您所写的内容。

如果您希望在字符串的开头匹配space#,就像您发布的当前String一样。你需要使用这个正则表达式: -

str.matches("^[ #]\\svalue1\\s+value2\\s+value3$");

答案 1 :(得分:1)

好吧,我现在可以告诉你,正则表达式因输入而失败,因为它需要#之前的空格

str.matches("^#?\\s+value1\\s+value2\\s+value3$");

正则表达式应该与"# value1 value2 value3"" value1 value2 value3"匹配可变数量的空格

答案 2 :(得分:0)

试试这个正则表达式(\s+|\s?#\s?).*value1.*(\s+|\t).*value2.*(\s+|\t).*value3.* 即使你在任何地方都有空格,它也能正常工作。