正则表达式,以防止在数字之前发生特定字符

时间:2014-08-27 07:18:34

标签: java regex

我希望在Java中使用正则表达式来匹配在给定字符串中第一次出现任何数字之前$未出现的模式。到目前为止,我得到的是([^$].*?)(\\d+?),但它匹配的字符串$在第一个数字之前有几个字符。我错过了什么吗? 例如,

dfn$jnjkdd84fjbd$bjk应无效($来自8),而

vsdivnsoi5$ier5girneg有效(5然后$)。

编辑:字符串中应该包含最少一位数字。

5 个答案:

答案 0 :(得分:1)

^[^$\\d]*[\\d].*$应该可以解决问题。

我们检查第一个数字之前的所有字符都不是" $"而不是数字。

final String invalid = "dfn$jnjkdd84fjbd$bjk";
final String valid = "vsdivnsoi5$ier5girneg";

final String regexp = "^[^$\\d]*[\\d].*$";

System.out.println(invalid.matches(regexp)); // false
System.out.println(valid.matches(regexp)); // true

答案 1 :(得分:0)

您可以像这样使用substring()matches()的组合:

public static void main(String[] args) {
    String s = "adsaa12s$21";
    s = s.substring(0, s.indexOf("$")); // upto $
    System.out.println(s);
    System.out.println(s.matches(".*?\\d.*?")); // does my string contain digits?

}

O / P:

adsaa12s
true

s = "sfs$21";
O/P:
sfs
false

答案 2 :(得分:0)

我使用:

^[^\\$]*\\d+[^\\$]*\\$

答案 3 :(得分:0)

  (?![^0-9]+\$.*)(?=.*?\d.*?\$.*)(^.*$)

使用此。这使用前瞻来确保$。之前的数字。

参见演示。

http://regex101.com/r/yX3eB5/8

答案 4 :(得分:0)

我的朋友帮我找到了一个非常短的正则表达式 -

^[^$0-9]+[0-9].*