0

我试图制作一个字符串声明的正则表达式,其中整个代码文件空间可以出现在声明之前的某个地方,并且在某个地方声明从行的左侧开始,没有任何空格......我该如何处理这些空格?

就像..

  1. <---空格------->字符串变量;//声明前的空格//
  2. 字符串变量;//声明前不存在空格//

我试过像 - strLine.toUpperCase().matches(". STRING\s. ") ---但它指向第一个声明。如何声明正则表达式以使其同时指向..

4

3 回答 3

0

您可以尝试使用1

strLine.matches("(?i)\\s*STRING")

一般来说,X*表示X 0 次或多次(?i)是忽略大小写的标志。

虽然您可能还想考虑

strLine.trim().equalsIgnoreCase("STRING")

1请注意,如果您要重复使用特定的正则表达式,您应该通过预编译它Pattern.compile()并使用Matcher.

于 2013-07-13T14:25:40.297 回答
0

String.matches()像这样使用:

if (strLine.matches("\\s*String\\s.*"))

正则表达式 formatches()必须匹配整个字符串,这就是为什么.*最后有 a 的原因。

此正则表达式还允许在“字符串”之后使用非空格字符,如制表符

于 2013-07-13T15:40:36.870 回答
0

你需要这样的东西来解释它之前String和之后的空格:(\\s*String\\s+(\\w+)它也会捕获变量名。

一个测试程序:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test {

   static final Pattern stringDeclaration = Pattern.compile( "\\s*String\\s+(\\w+)" );

   static void match( String s )
   {
       Matcher m = stringDeclaration.matcher( s );
       if( m.find() )
           System.out.println( "Found variable: " + m.group(1) );
       else
           System.out.println( "No match for "  + s );
   }

   public static void main(String[] args) {
      match( "    String s1;" );
      match( "String s2;" );
      match( "    String     s3;" );   
      match( "    String s4   ;" );   
      match( "    String s5;   " );   
   }
}

还有一些在线正则表达式测试器。我喜欢http://www.regexplanet.com/advanced/java/index.html上的那个。

于 2013-07-13T14:44:49.547 回答