- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下方法:
protected BigDecimal stringToBigDecimal(String value) throws ParseException
{
if (Pattern.matches("[\\d,.]+", value))
{
Number n = NumberFormat.getInstance().parse(value);
return new BigDecimal(n.doubleValue());
}
else
{
throw new ParseException("Invalid String", -1);
}
}
该值引发异常(如预期),因此此 regExpr 有效:
String wrongAmount = "1,U35,345.43";
但是当我尝试这个时:
protected BigDecimal stringToBigDecimal(String value) throws ParseException
{
if (Pattern.matches("[\\D&&[^.,]]+", value))
{
throw new ParseException("Invalid String", -1);
}
Number n = NumberFormat.getInstance().parse(value);
return new BigDecimal(n.doubleValue());
}
没有抛出异常,但是为什么呢?首先,我认为“except for”表达式存在逻辑问题,因此我用这种模式尝试了这个值:
String wrongAmount = "1U3534543";
protected BigDecimal stringToBigDecimal(String value) throws ParseException
{
if (Pattern.matches("[\\D]+", value))
{
throw new ParseException("Invalid String", -1);
}
Number n = NumberFormat.getInstance().parse(value);
return new BigDecimal(n.doubleValue());
}
...但这不匹配?我对“非数字表达式”\\D.
的理解有什么错误。该值包含“U”,那么为什么不匹配呢?
最佳答案
让我们剖析一下您的每一种模式:
Pattern.matches("[\\d,.]+", value)
匹配由一个或多个数字、逗号和点组成的任何字符串。
Pattern.matches("[\\D&&[^.,]]+", value)
您不能像在这里那样“组合”字符类。您真正用 [\\D&&[^.,]]
说的是“匹配任何非数字字符,除了点和逗号。”编写该正则表达式的正确方法是:
[^\\d,.] # match anything but digits, comma and dot
最后但并非最不重要的一点:
Pattern.matches("[\\D]+", value)
这意味着:“匹配完全由非数字字符组成的非空字符串。”
Pattern.matches()
尝试将整个字符串与正则表达式进行匹配。如果您尝试仅匹配字符串的一部分,则需要使用 Matcher.find()
。
最后,您误解了 +
的工作原理。 +
是一个量词,意思是“1 或更多”。它没有做你认为它正在做的事情。
关于java - RegExpr 与否定字符类混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10011597/
我想从一组短文本中找到的字典中学习术语的位置。问题出在以下代码的最后几行,大致基于 From of list of strings, identify which are human names an
我有以下方法: protected BigDecimal stringToBigDecimal(String value) throws ParseException { if (Patter
我试图从想要使用匹配器匹配模式的字符串中获取所有输出,但是,我不确定该字符串或我的模式不正确。我试图在换行符之后将(服务器:交换机)作为第一个模式,依此类推,但是,我只得到输出显示的最后三个模式。我的
你能帮助理解正则表达式的输出吗?我对下面 10 的文本位置感兴趣。但它显示了两个值,即 10 和 4。我如何只捕获数字 10。 这个输出是数字向量吗? text<-"World is beautifu
我正在尝试以下操作,这应该允许我获得 productUrl:// 之间的所有内容以及以下? (? x regmatches(x, gregexpr('"productUrl":"\\K[^?"]*'
我有一个包含如下数学函数的字符串: sin(x[1]) + cos(x[2]) + tan(x[3]) + x[1] 现在我想使用 regexpr 将每个 x[number] 替换为字母表中的一个字母
我需要匹配下划线 _ 和反斜杠之间的所有内容。所以任何类似 bahbah_12345_12345\bahbah 的东西我只想要 _12345_12345 的部分。 我使用 regexr 和 regex
我需要一些使用 RegExp 对象的建议。 它应该只从变量 val 返回数字和字符“/”……我对 RegExp 对象没有经验——这是我到目前为止得到的: var val = $('.galleryst
我是一名优秀的程序员,十分优秀!