Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式,用于匹配除最后4位以外的所有长度未知的数字_Regex - Fatal编程技术网

Regex 正则表达式,用于匹配除最后4位以外的所有长度未知的数字

Regex 正则表达式,用于匹配除最后4位以外的所有长度未知的数字,regex,Regex,有一个长度未知的数字,其思想是构建一个正则表达式,该表达式匹配除最后4位以外的所有数字 为了达到这个目标,我做了很多努力,但还没有成功 目前我有一个正则表达式:“^(\d*)\d{0}\d{0}\d{0}\d{0}.*$” 输入:1234567890899775 预期产量:XXXXXXXXXX 9775 我使用的方法如下(但这不起作用): 请建议我应该如何处理这个问题或给我解决方案。 在这种情况下,我的重点是否定正则表达式:“\d{4}$”尝试: String pattern = "^(.*)[

有一个长度未知的数字,其思想是构建一个正则表达式,该表达式匹配除最后4位以外的所有数字

为了达到这个目标,我做了很多努力,但还没有成功

目前我有一个正则表达式:“^(\d*)\d{0}\d{0}\d{0}\d{0}.*$”

输入:1234567890899775

预期产量:XXXXXXXXXX 9775

我使用的方法如下(但这不起作用):

请建议我应该如何处理这个问题或给我解决方案。 在这种情况下,我的重点是否定正则表达式:“\d{4}$”

尝试:

String pattern = "^(.*)[0-9]{4}$";
注释后补遗:仅匹配完整数字的重构可能如下所示:

String pattern = "^([0-9]+)[0-9]{4}$";
尝试:

注释后补遗:仅匹配完整数字的重构可能如下所示:

String pattern = "^([0-9]+)[0-9]{4}$";

仍然不允许发表评论,因为我还没有“50代表”,但DDeMartini的回答会吞掉前缀为“^(.*)”的非数字帐户,因为“^(.*)”也会匹配abcdef1234之类的内容-请遵守您的\d-语法

"^(\\d+)(\\d{4}$)"
似乎工作良好,需要数字(最小长度6个字符)。像测试一样测试它

public class AccountNumberPadder {

    private static final Pattern LAST_FOUR_DIGITS = Pattern.compile("^(\\d+)(\\d{4})");

    public static void main(String[] args) {
        String[] accountNumbers = new String[] { "123456789089775", "999775", "1234567890897" };
        for (String accountNumber : accountNumbers) {
            Matcher m = LAST_FOUR_DIGITS.matcher(accountNumber);
            if (m.find()) {
                System.out.println(paddIt(accountNumber, m));
            } else {
                throw new RuntimeException(String.format("Whooaaa - don't work for %s", accountNumber));
            }
        }
    }

    public static String paddIt(String input, Matcher m) {
        StringBuilder b = new StringBuilder();
        for (int i = 0; i < m.group(1).length(); i++) {
            b.append("X");
        }
       return input.replace(m.group(1), b.toString());
    }
}
公共类AccountNumberAdder{
私有静态最终模式最后四位=Pattern.compile(^(\\d+)(\\d{4})”;
公共静态void main(字符串[]args){
字符串[]AccountNumber=新字符串[]{“1234567890899775”、“999775”、“12345678908997”};
for(字符串accountNumber:accountNumber){
匹配器m=最后四位。匹配器(帐号);
if(m.find()){
System.out.println(paddIt(accountNumber,m));
}否则{
抛出新的RuntimeException(String.format(“Whooaaa-不适用于%s”,accountNumber));
}
}
}
公共静态字符串paddIt(字符串输入,匹配器m){
StringBuilder b=新的StringBuilder();
对于(int i=0;i
仍然不允许评论,因为我还没有“50个代表”,但DDeMartini的回答会吞掉带前缀的非数字帐户,因为“^(.*)”也会匹配abcdef1234之类的内容-请遵守您的\d-语法

"^(\\d+)(\\d{4}$)"
似乎工作良好,需要数字(最小长度6个字符)。像测试一样测试它

public class AccountNumberPadder {

    private static final Pattern LAST_FOUR_DIGITS = Pattern.compile("^(\\d+)(\\d{4})");

    public static void main(String[] args) {
        String[] accountNumbers = new String[] { "123456789089775", "999775", "1234567890897" };
        for (String accountNumber : accountNumbers) {
            Matcher m = LAST_FOUR_DIGITS.matcher(accountNumber);
            if (m.find()) {
                System.out.println(paddIt(accountNumber, m));
            } else {
                throw new RuntimeException(String.format("Whooaaa - don't work for %s", accountNumber));
            }
        }
    }

    public static String paddIt(String input, Matcher m) {
        StringBuilder b = new StringBuilder();
        for (int i = 0; i < m.group(1).length(); i++) {
            b.append("X");
        }
       return input.replace(m.group(1), b.toString());
    }
}
公共类AccountNumberAdder{
私有静态最终模式最后四位=Pattern.compile(^(\\d+)(\\d{4})”;
公共静态void main(字符串[]args){
字符串[]AccountNumber=新字符串[]{“1234567890899775”、“999775”、“12345678908997”};
for(字符串accountNumber:accountNumber){
匹配器m=最后四位。匹配器(帐号);
if(m.find()){
System.out.println(paddIt(accountNumber,m));
}否则{
抛出新的RuntimeException(String.format(“Whooaaa-不适用于%s”,accountNumber));
}
}
}
公共静态字符串paddIt(字符串输入,匹配器m){
StringBuilder b=新的StringBuilder();
对于(int i=0;i
您可以使用

\G\d(?=\d{4,}$)

详细信息

  • \G
    -字符串的开始或上一个匹配的结束
  • \d
    -一个数字
  • (?=\d{4,}$)
    -一种正向前瞻,需要在当前位置右侧的字符串末尾有4位或更多数字
:

你可以用

\G\d(?=\d{4,}$)

详细信息

  • \G
    -字符串的开始或上一个匹配的结束
  • \d
    -一个数字
  • (?=\d{4,}$)
    -一种正向前瞻,需要在当前位置右侧的字符串末尾有4位或更多数字
:


我相信你是对的。我将对此进行测试,并在成功后接受答案。我构建了一个这样的正则表达式,但我相信我不清楚如何将正则表达式的一部分保留在括号内,因为对我来说,它看起来像是整数的匹配,但我猜括号正则表达式只与字符串/数字匹配。我相信你是对的。我将对此进行测试,并在成功后接受答案。我构建了一个这样的正则表达式,但我相信我不清楚如何将正则表达式的一部分保留在括号内,因为对我来说,它看起来像是整数的匹配,但我猜括号正则表达式只与字符串/数字匹配。是的,它会吞下比数字更多的内容。可以将它稍微重构为:“^([0-9]+)[0-9]{4}”是的,它会吞下不止一个数字。可以将其稍微重构为:“^([0-9]+)[0-9]{4}”