2016-07-19 27 views
0

我想找到一些字符串模式(`“isempty var0”)出来的一些长字符串,我正在读取文件时,我不知道如果正则表达式适用于我的要求?字符串模式查找,是否正则表达式适用于我的要求?

更准确地说,在预期的字符串模式中isempty是一个关键字,并且在一定的空间后面会有一些java变量。

输入字符串可以是这样的:

"isempty var0 && v1== 56" 
"v2 == 50 || isempty var1" 
"Q3 == 100 || (isempty var2)" 
"isempty var3" 
"is thisnotisempty var4" 

和预期输出是:

"isempty var0" 
"isempty var1" 
"isempty var2" 
"isempty var3" 
null 

目前,我试图找到使用String.contains()模式, 字符串.CharAt(),String.indexOf()方法等

虽然我不知道这是否可以用正则表达式?如果可以的话可以有人提供一些想法,那么Regex可能会找到这种模式吗?

谢谢!

回答

1

试试这个:

\bisempty\s+\w+ 

Online demo.

+0

由于它的工作。我是新与正则表达式,你能推荐一些好的教程入手呢?? –

+1

@shriduttkothari我不知道任何教程,对不起,我只是通过阅读文档学到正则表达式。 –

+0

你能分享你遵循的文件吗? –

1

你的例子看起来非常像您要处理原始程序代码。

简短的回答是YES,你可以使用正则表达式模式来查看一个事物,并找出它是否包含你正在寻找的值。像(\w+\s+\w+)这样的东西将是一个起点,但它可能最终会比这更复杂。

长的答案是,如果您正在处理程序代码,您可能需要使用纹理解析API进行研究。关键词java code parser的快速搜索源于相当多的数据。解析器理解你的文本的结构,因为正则表达式只能测试和检查它。因此,当您需要验证代码的结构并识别特定语法结构(如isempty x构造)时,解析器可以提供帮助。

1

是的,你可以使用正则表达式来做到这一点(在许多方面)。一种选择是replaceAll

public static void main(String[] args) throws Exception { 
    String s1 = "isempty var0 && v1== 56"; 
    String s2 = "isempty var3"; 
    String s3 = "is thisnotisempty var4"; 
    String s4 = "is thisnotisempty 4var4"; // returns empty string. Java variable names cannot start with a number. 
    String s5 = "Q3 == 100 || (isempty var2)"; 
    String s6 = "isempty var3"; 

    System.out.println(s1.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s2.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s3.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s4.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s5.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s6.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
} 

O/P:

isempty var0 
isempty var3 


isempty var2 
isempty var3 

PS:请注意,你不会得到null这里(当字符串不 “具有” isempty someVar,而不是你会得到空字符串。

相关问题