遇到了麻烦正则表达式正常工作

问题描述 投票:2回答:3

我试图完成这个代码的最后一部分,但似乎无法得到最后2 if语句是有效的,当他们应该。当没有字母数字或破折号第二个应显示( - )。第三要确保2个破折号是不连续的,而不是在开始或结束。该表达式必须是错的,但我对如何解决这些问题还是新的正则表达式不知道。感谢您的帮助提前!这里是我到目前为止...

import java.util.Scanner;

public class VerifySerialBHarris {

    public static void main(String[] args) {

        Scanner input=new Scanner(System.in);
        String text;
        String cha;


        System.out.println("Enter a Serial number: ");
        text=input.nextLine();

        if(text.matches("[A-Za-z0-9]+(-[A-Za-z0-9]+){2}")){
        System.out.println("Serial number "+text+" verification \nValid");
        System.out.println("Enter a wildchar character: ");
        cha=input.nextLine();
        text= text.replaceAll("[A-Za-z0-9]", cha);
        System.out.println("Masked serial: "+text);
    }
        if(text.matches(".[^-A-Za-z0-9].")) {
           System.out.println("Invalid. Serial should only contain letters, numbers, and dashes(-)"); 

       }

        if(text.matches("[^A-Za-z0-9]+(-[A-Za-z0-9]+)"))
        System.out.println("Invalid. There should be exactly 2 non-consecutive dashes in the middle. ");
}
}

Example

java regex
3个回答
0
投票

完全匹配序列

^[A-Za-z0-9]{4}\x2d[A-Za-z0-9]{4}\x2d[A-Za-z0-9]{4}

使用Regexr.com构建和测试


0
投票

你已经有充分的模式[A-Za-z0-9]+(-[A-Za-z0-9]+){2},它可能更容易列出模式,并给出错误信息,说明输入的数据不符合要求的模式。

如果你想通过分析那种作出错误的给予反馈给用户,那么你必须为所有样的错误,用户可以创建一个模式。对于代码,我建议利用例如一个if else if结构,使你没有得到错误信息,而模式是正确的。

关于第二个和第三个模式

当没有字母数字或破折号第二个应显示( - )。

第二图案.[^-A-Za-z0-9].将匹配3个字符,其中第一和最后一个可以是除由于点换行符任何字符,并且还可以匹配一个字母或数字。

为了配合无字母数字或破折号,你可以使用:

.*[^-A-Za-z0-9].*

第三要确保2个破折号是不连续的,而不是在开始或结束

第三个模式[^A-Za-z0-9]+(-[A-Za-z0-9]+)首先匹配使用[^也可以搭配一个连字符,因为它不是上市究竟是不是因否定字符类,但没有到。

为了匹配这个模式,你可以重复连字符1+时间:

[A-Za-z0-9]+(-+[A-Za-z0-9]+){2,}

Updated Java code


0
投票

你的第一个正则表达式,[A-Za-z0-9]+(-[A-Za-z0-9]+){2},已经只匹配包含正好用两个非连续的破折号间括3个块码。

当您使用的是第二正则表达式,它主要的问题,因为你有你的状态倒。它更容易询问是否匹配失败[-A-Za-z0-9]+比它确实符合一些其他的模式,只有适合与无效字符序列 - 一个令人困惑的双重否定。

对于第三个条件,你也许并不需要在所有检查什么。你已经消灭了所有其他的失败案例(无效字符和不正确的布局),因此你可以描述你需要通过一个单一的破折号分开3个字母块。

而作为它已经提到其他地方,你应该用if ... else if ... else ...等。

© www.soinside.com 2019 - 2024. All rights reserved.