gpt4 book ai didi

java - 正则表达式到java代码

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:49 29 4
gpt4 key购买 nike

我想用 java 编写正则表达式。可能的字符串是:

yyyyyy$
<t>yy<\t>$
<t><t>yyyyy<\t><\t>$
<t><t>y<\t>y<\t><t>yyyyy<\t>yy$

不允许或可能的字符串是:

<t><\t>$ (no “y” in the string)
<t>yy<t><\t>$ (one extra <t> ).

一些规范是:任何正确的字符串中都恰好有一个 $,并且这始终是字符串中的最后一个符号。这$ 之前的字符串必须非空,我们调用它是一种表达。表达式是递归定义的如:

  • 字母“y”
  • <t> 括起来的表达式和<\t>
  • 一系列表达式。

我构建的正则表达式是:y+|y*(<t>y+(<t>y*<\t>)*<\t>)现在我在java中将此正则表达式编码为:"d+|(d*(<s>d+(<s>d*<\\s>)*<\\s>))$"代码:

private static void checkForPattern(String input) {
Pattern p = Pattern.compile(" d+ | (d*(<s>d+(<s>d*<\\s>)*<\\s>)) $");
//Pattern p= Pattern.compile("d+|d*<s>dd<\\s>$");
Matcher m = p.matcher(input);
if (m.matches()) {
System.out.println("Correct string");
} else {
System.out.println("Wrong string");
}
}

语法中有什么错误,因为它在我正在解析的每个字符串上都显示“错误”。

最佳答案

我建议不要为此使用正则表达式,因为 Java 的正则表达式引擎无法有效平衡 <t> 的数量与 <\t>像其他正则表达式引擎(即.NET)一样出现。即使在这些引擎中执行此操作也相当复杂,并且可能有更好的方法来解决您的问题。下面的代码就是这样做的:它计算 <t> 出现的次数。并确保 <\t> 的数量相同存在。同样,它计算 y 出现的次数。并确保有超过 0实例。 countOccurrences 的逻辑方法改编自this answer关于问题Occurrences of substring in a string .

See code in use here

class Main {
public static void main(String[] args) {
String[] strings = {
"yyyyyy$",
"<t>yy<\\t>$",
"<t><t>yyyyy<\\t><\\t>$",
"<t><t>y<\\t>y<\\t><t>yyyyy<\\t>yy$",
"<t><\\t>$",
"<t>yy<t><\\t>$"
};

for(String s : strings) {
if (countOccurrences("<t>", s) == countOccurrences("<\\t>", s) && countOccurrences("y", s) > 0) {
System.out.println("Good: " + s);
} else {
System.out.println("Bad: " + s);
}
}
}

private static int countOccurrences(String needle, String haystack) {
int lastIndex = 0;
int count = 0;
while (lastIndex != -1) {
lastIndex = haystack.indexOf(needle, lastIndex);
if (lastIndex != -1) {
count++;
lastIndex += needle.length();
}
}
return count;
}
}

结果:

Good: yyyyyy$
Good: <t>yy<\t>$
Good: <t><t>yyyyy<\t><\t>$
Good: <t><t>y<\t>y<\t><t>yyyyy<\t>yy$
Bad: <t><\t>$
Bad: <t>yy<t><\t>$

关于java - 正则表达式到java代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49495622/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com