字符串模式查找,正则表达式是否适用于我的要求?

时间:2016-07-19 05:17:41

标签: java regex qregexp

我试图在读取文件时找到一些长字符串中的字符串模式(`“isempty var0”),我不确定Regex是否适用于我的要求?

更准确地说,在预期的字符串模式中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()查找模式,   String.CharAt(),String.indexOf()方法等。

     

虽然我不确定这是否可以用Regex解决?如果可以,有人可以提出一些想法,可能是什么   正则表达式找到这种模式?

谢谢!

3 个答案:

答案 0 :(得分:1)

试试这个:

\bisempty\s+\w+

Online demo.

答案 1 :(得分:1)

您的示例与您尝试处理原始程序代码非常相似。

简短的答案是肯定的,你可以使用正则表达式模式来查看事物,并确定它是否包含您要查找的值。像(\w+\s+\w+)这样的东西将是一个起点,尽管它可能会比这更复杂。

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

答案 2 :(得分: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(当字符串没有""#34; isempty someVar时,您将获得空字符串。