我希望在Java中使用正则表达式来匹配在给定字符串中第一次出现任何数字之前$
未出现的模式。到目前为止,我得到的是([^$].*?)(\\d+?)
,但它匹配的字符串$
在第一个数字之前有几个字符。我错过了什么吗?
例如,
dfn$jnjkdd84fjbd$bjk
应无效($
来自8
),而
vsdivnsoi5$ier5girneg
有效(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)
答案 4 :(得分:0)
我的朋友帮我找到了一个非常短的正则表达式 -
^[^$0-9]+[0-9].*