我试图制作一个字符串声明的正则表达式,其中整个代码文件空间可以出现在声明之前的某个地方,并且在某个地方声明从行的左侧开始,没有任何空格......我该如何处理这些空格?
就像..
- <---空格------->字符串变量;//声明前的空格//
- 字符串变量;//声明前不存在空格//
我试过像 - strLine.toUpperCase().matches(". STRING\s. ") ---但它指向第一个声明。如何声明正则表达式以使其同时指向..
您可以尝试使用1
strLine.matches("(?i)\\s*STRING")
一般来说,X*
表示X
0 次或多次。(?i)
是忽略大小写的标志。
虽然您可能还想考虑
strLine.trim().equalsIgnoreCase("STRING")
1请注意,如果您要重复使用特定的正则表达式,您应该通过预编译它Pattern.compile()
并使用Matcher
.
String.matches()
像这样使用:
if (strLine.matches("\\s*String\\s.*"))
正则表达式 formatches()
必须匹配整个字符串,这就是为什么.*
最后有 a 的原因。
此正则表达式还允许在“字符串”之后使用非空格字符,如制表符
你需要这样的东西来解释它之前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上的那个。