Regex 正则表达式匹配以特定正则表达式结尾的句子中的数字

Regex 正则表达式匹配以特定正则表达式结尾的句子中的数字,regex,Regex,我有一个不可预测的句子: Parameters: 123? ,345 abc#8678Alfa 666 我需要正则表达式匹配所有数字,除了那些以Alfa结尾的数字。看起来很简单,但是 以下是我的尝试: ([0-9]+)(?!Alfa) 这是正则表达式的结果: 123 345 867 666 867是我不想要的结果 你能给我一个提示吗?下面的正则表达式适用于你的情况 “(?![0-9]+Alfa)[0-9]+” //输出将为123 345 666 被称为负前瞻,用于忽略遵循指定模式的字符串。

我有一个不可预测的句子:

Parameters: 123? ,345 abc#8678Alfa 666
我需要正则表达式匹配所有数字,除了那些以Alfa结尾的数字。看起来很简单,但是

以下是我的尝试:

([0-9]+)(?!Alfa)
这是正则表达式的结果:

123 345 867 666
867是我不想要的结果


你能给我一个提示吗?

下面的正则表达式适用于你的情况

“(?![0-9]+Alfa)[0-9]+”

//输出将为123 345 666

被称为负前瞻,用于忽略遵循指定模式的字符串。更多信息请访问


希望这有帮助。

以下正则表达式适用于您的情况

“(?![0-9]+Alfa)[0-9]+”

//输出将为123 345 666

被称为负前瞻,用于忽略遵循指定模式的字符串。更多信息请访问


希望这能有所帮助。

所有格量词起作用:
([0-9]+)(!Alfa)
(用perl测试:
m/([0-9]+)(!Alfa)/g
)。

所有格量词起作用:
([0-9]+)(!Alfa)
(用perl测试:
m/([0-9]+)(!Alfa)/g

),你需要锚定比赛的终点

使用所有格
++
而不是
++
将否定回溯,因此它会自动锚定到匹配的结尾。(效率最高,但通常不可用)


在没有所有格的情况下,使用
(?!Alfa |[0-9])
可以确保匹配不会以Alfa或数字中间结束。你也可以使用<代码>(“=(^ 0~9})$)/代码>来检查你的匹配没有结束在一个数字的中间。

对于你的否定展望,你需要锚定你的匹配结束。

使用所有格
++
而不是
++
将否定回溯,因此它会自动锚定到匹配的结尾。(效率最高,但通常不可用)


在没有所有格的情况下,使用
(?!Alfa |[0-9])
可以确保匹配不会以Alfa或数字中间结束。你也可以使用<代码>(“=(^ 0~9})$)/代码>来检查你的匹配没有结束在一个数字的中间。

提示:@泡泡泡泡!谢谢但是,如果使用“/”而不是“Alfa”,为什么它不起作用呢\b([0-9]+)(?!\/)\b如果可用,您可以使用所有格量词:
([0-9]+)(?!whateveryouwant)
,如果不可用,您可以使用前瞻、捕获组和反向引用来模拟它:
(?=[0-9]+)\1(?!whateveryouwant)
。提示:@bobblebble它有效!谢谢但是,如果使用“/”而不是“Alfa”,为什么它不起作用呢\b([0-9]+)(?!\/)\b如果可用,您可以使用所有格量词:
([0-9]+)(?!whateveryouwant)
,如果不可用,您可以使用前瞻、捕获组和反向引用来模拟它:
(?=[0-9]+)\1(?!whateveryouwant)
(?在任何正则表达式引擎中都是无用的。别忘了正则表达式引擎从左到右测试字符串。另外,没有理由使用修饰符:
xms
(没有点,没有空格,没有锚)。负回望
(?不会影响结果,但在这方面性能更好。)(可以说是病理性的)案例:
print(((“0”x 100000.Alfa”)=~m/(?)。它避免了大量的回溯。的确,但在案例中,您可以使用:
[0-9]+(*SKIP)(?!Alfa)
来避免测试所有无用位置的成本。我不知道(*SKIP)。谢谢您的提示。
(?在任何正则表达式引擎中都是无用的。别忘了正则表达式引擎从左到右测试字符串。另外,没有理由使用修饰符:
xms
(没有点,没有空格,没有锚)。负回望
(?不会影响结果,但在这方面性能更好。)(可以说是病理性的)案例:
print(((“0”x 100000.Alfa”)=~m/(?。它避免了大量的回溯。事实上,但在案例中,您可以使用:
[0-9]+(*SKIP)(?!Alfa)
来避免测试所有无用位置的成本。我不知道(*SKIP)。谢谢您的提示。
    String input = "Parameters: 123? ,345 abc#8678Alfa 666";

    String patternString = "(?![0-9]+Alfa)[0-9]+";

    Pattern pattern = Pattern.compile(patternString);

    Matcher matcher = pattern.matcher(input);

    while (matcher.find()) {
        System.out.println(matcher.group());
    }