0

我制定了以下我想转换为代码的正则表达式。但是遇到了一些麻烦:

“至少匹配一个=,并忽略直到特殊字符集的所有内容,无论这些特殊字符多久出现一次。”

特殊设置可能是:()|&!

例如,对于以下内容,我想忽略和之间的所有in内容out

(in == 1'b1) | !out & (sig==1'b0)

以下正则表达式将例如为组创建一个 plit: ==, ) | !:

\s*[=][&()!|=\s]*

但是我怎样才能匹配1'b1in 和 out 之间,这将是某种“匹配一个=到一个或多个特殊字符之后的任何内容?

4

1 回答 1

2

如果它不必是一个正则表达式,那么您可以尝试这种方式

String data = "(in1 == 1'b1) |(in == 1'b1) | !out & (sig==1'b0) | !1out2 & (sig==1'b0)";
// I will try to split on every special character and space
String[] allTokens = data.split("[=()&|!\\s]+");
// but this will produce
// [, in1, 1'b1, in, 1'b1, out, sig, 1'b0, 1out2, sig, 1'b0]

// so I will try to filter tokens that are not only digits and letters
// with at least one letter
List<String> correctTokens = new ArrayList<>();

Pattern p = Pattern.compile("(?=.*[a-zA-Z])[a-zA-Z0-9]");
//(?=.*[a-zA-Z]) will return true if data will contain at least one letter
//and will contain only letters a-zA-Z and digits 0-9
for (String s : allTokens) {
    Matcher m = p.matcher(s);
    if (m.matches()) {
        correctTokens.add(s);
    }
}
System.out.println(correctTokens);

输出:

[in1, in, out, sig, 1out2, sig]
于 2013-04-14T16:19:45.770 回答