2 回答
TA贡献1765条经验 获得超5个赞
你".*/([0-9]+,)+/g.*"是因为你提供一个“毁”,腐败的模式.*/和/g.*错误。关键是在字符串内的任何地方寻找[0-9]+,(甚至[0-9],)。
您可以通过将正则表达式传递给方法来[0-9],使用类似的模式并使用Kotlincontains()方法或 JavaMatcher#find()方法:
var mString = "14 90,"
var pattern = "[0-9]+,".toRegex()
if(mString.contains(pattern)){
println("Valid")
}
请参阅Kotlin 演示。
在这里,pattern被实例化为Regex类的实例,并将正则表达式对象传递给contains方法。
Java代码:
if (Pattern.compile("[0-9],").matcher(s).find()) {
System.out.println("Matched");
}
TA贡献1946条经验 获得超4个赞
Java 模式不会在正则表达式字符串本身内应用修饰符或上下文。使用".*/([0-9]+,)+/g.*",看起来您正在尝试使用该g模式在全局范围内应用表达式。如果你想应用修饰符,那么你应该将它们作为第二个参数添加到Pattern.compile:
Pattern.compile(".*([0-9]+,).*", Pattern.DOTALL)
在您的情况下,您可能不需要模式修饰符。只需.*([0-9]+,).*用作您的正则表达式:
if (mString.matches(".*([0-9]+,).*")) {
// Found it!
}
更新:
我最初认为内联修饰符在 Java 中不可用,但事实证明它java.util.Pattern确实支持内联修饰符。这在类中的第一个 Javadoc 样式注释中进行了记录Pattern:
/**
* Regular expression modifier values. Instead of being passed as
* arguments, they can also be passed as inline modifiers.
* For example, the following statements have the same effect.
* <pre>
* RegExp r1 = RegExp.compile("abc", Pattern.I|Pattern.M);
* RegExp r2 = RegExp.compile("(?im)abc", 0);
* </pre>
*
* The flags are duplicated so that the familiar Perl match flag
* names are available.
*/
可以在同一类中的每个修饰符常量中找到有关每个修饰符使用什么字符的更多详细信息。例如,Pattern.DOTALL可以使用表达式启用(?s)。
添加回答
举报