当前位置: 首页 > 知识库问答 >
问题:

如何检查该行是否与正则表达式(regex)相矛盾?

宓弘壮
2023-03-14

抱歉,如果这是重复的,我没有发现类似的问题,也许我错过了什么。。。

我将举例说明我想要什么:

>

  • 假设我们有一个用于检查电子邮件的简单正则表达式

    私有静态最终字符串EMAIL_PATTERN = "^[_A-Za-z0-9-\\](\\.[_A-Za-z0-9-] )*@[A-Za-z0-9-](\\.[A-Za-z0-9])*(\\.[A-Za-z]{2,})$";

    我开始一个符号一个符号地输入(在一些输入字段中)电子邮件(或者不是电子邮件,而是一些字符串),并按正则表达式检查整行。

    • 输入:u
    • 输入:@
    • 行:用户名@@
    • 检查:false\\因为没有办法获得正确的行附加任何符号
    • 输入:d
    • 行:username@d
    • 检查:true
    • 输入:
    • 输入:

    换句话说,我想通过正则表达式检查字符串,如果附加符号可能会给我们正确的字符串,则会得到肯定的结果。

  • 共有3个答案

    司空学智
    2023-03-14

    您可以使用正则表达式。模式正则表达式。Matcher来自util包的类

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    //...
    
    private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";    
    
    // String to be scanned to find the pattern.
    String line = "Your line";
    String pattern = EMAIL_PATTERN;
    
    // Create a Pattern object
    Pattern r = Pattern.compile(pattern);
    
    // Now create matcher object.
    Matcher m = r.matcher(line);
    
    // You can use capturing groups to partially check the line
    // e.g. for Java 6 use the following to access the first group
    String value = m.group(0);
    
    // True, in case the matcher did not find any according value:
    value.equals("NO MATCH"); 
    

    比较http://www.tutorialspoint.com/java/java_regular_expressions.htm和Java正则表达式捕获组

    然后,您可以检查不同的组,一旦有一个组不匹配,但后面的组确实匹配,您的案例中就不再可能有有效的输入(仅通过添加)。

    为了使其适用于您的示例,您可以调用say avalidate函数,该函数在每个enter事件(例如按键按下事件)上实现上述代码。但这取决于你的UI框架

    商迪
    2023-03-14

    您可以在这里使用的是。这是使前面的符号可选的符号。您的示例很糟糕,因为电子邮件不应该通过正则表达式验证,所以我将使用其他东西。

    假设您想要匹配以下内容

    4个字母、2个数字、4个字母

    所以你可以使用正则表达式

    (?:\w{0,4})?(?:\d{0,2})?(?:\w{0,4})?
    

    下面的组称为非捕获组。您可以使用捕获组,但由于性能原因,您不应该使用,因为您不需要捕获的内容。

    (?:某物)

    外植体

    基本上,我所做的就是去决定我最初的产品规格中的细线是什么

    4个字母表。。

    然后我把每一部分分成一个单独的正则表达式,让它成为可选的,这样我的正则表达式基本上就是

    • 任意匹配0到4个字符并进一步匹配
    • 任意匹配0到2位数字并进一步匹配
    • 任意匹配0到4个字符并进一步匹配

    以上不是充分的证据。它可能会产生误报,但如果担心追加是否会产生正确的结果,并且您不需要绝对值,那么您可以使用这种方法。

    为了获得更好的结果,即绝对正确的结果,您可以使用lookbehinds。但请注意,这可能会变得复杂。但是,如果你想找一些简单的东西,这是可行的。

    夏朗
    2023-03-14

    要事第一...

    仅仅根据地址的外观就很难验证电子邮件。。。大多数时候人们只是做错了。你也是。很抱歉

    这不是关于regex,而是关于用户体验...

    你最好允许用户输入他们想要的任何东西,并告诉他们他们的电子邮件是否可能打错,而不是首先阻止用户输入。

    如果您仍然想使用正则表达式运行,只需将后面的部分设置为可选,这样不完整的部分就可以与正则表达式匹配。

    https://regex101.com/r/zO6nM7/1

    /^[_a-z0-9-\+.-]+(\.[_a-z0-9-]+)*@?([a-z0-9+\-]+\.)*[a-z0-9+\-]*$/i
    
     类似资料:
    • 问题内容: 我有一个字符串。如何检查字符串是正则表达式还是包含正则表达式还是正常字符串? 问题答案: 您唯一可以做的可靠检查是,如果语法正确的是正则表达式: 但是请注意,即使对于像和这样的字符串,也会导致这种情况,因为从技术上讲,它们是有效的正则表达式。 唯一会返回的情况是不是有效正则表达式的字符串,例如或或。

    • 问题内容: 我有一个小程序,允许用户输入一些正则表达式。之后,我想检查此输入是否为 有效的 正则表达式。 我想知道Java中是否有内置方法,但是找不到这种喷射器。 你能给我一些建议吗? 问题答案: 这是一个例子。 然后输出,例如。

    • 问题内容: 我想使用JavaScript(可以与jQuery一起使用)进行一些客户端验证,以检查字符串是否与正则表达式匹配: 理想情况下,它将是一个返回true或false的表达式。 我是JavaScript新手,我需要做什么?似乎要检查字符串的一部分是否匹配正则表达式,而不是整个字符串。 问题答案: 使用,如果你想要的是一个布尔结果: …并且您可以从正则表达式中删除,因为您无需捕获。

    • 问题内容: 我正在寻找Java代码来检查字符串是否为有效的XML。 问题答案: 用正则表达式验证XML是不可能的。XML不是常规语言。 使用XML解析器尝试将字符串解析为XML,或者对照模式(例如DTD或XSD文件)验证XML文档。

    • 我需要一个正则表达式来检查和删除< code > membership user < code > userName 中的特殊字符。 当我第一次将网站设置为测试版时,我没有考虑到特殊字符不是获取用户名的好方法,“在我的应用程序中”。 下面我有一段模板代码,写得不太正确,但是给了愿意帮助的人一个好的开始。 --我需要从用户名中删除所有特殊字符和空格,同时更新用户名。 当我说我所说的特殊字符~、`、!

    • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。