为了账号安全,请及时绑定邮箱和手机立即绑定

尝试使用正则表达式查找数字后跟逗号的出现

尝试使用正则表达式查找数字后跟逗号的出现

泛舟湖上清波郎朗 2021-10-17 16:05:05
这是我想用正则表达式验证字符串:var mString = "14 90,"。在这种情况下,我想检查字符串是否包含一组数字后跟逗号的出现90,我有这个正则表达式模式:var pattern: Pattern = Pattern.compile(".*/([0-9]+,)+/g.*")但是在评估字符串时,它返回 false:if(pattern.matcher(mString).find()){        //found it!}我做错了什么?
查看完整描述

2 回答

?
POPMUISE

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");

}


查看完整回答
反对 回复 2021-10-17
?
绝地无双

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)。


查看完整回答
反对 回复 2021-10-17
  • 2 回答
  • 0 关注
  • 212 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信