首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单(我认为)场景所需的正则表达式帮助

简单(我认为)场景所需的正则表达式帮助
EN

Stack Overflow用户
提问于 2011-08-19 15:02:56
回答 3查看 101关注 0票数 2

从来都不擅长这些事情。我们正在使用Checkstyle (针对Java)来执行良好的编码实践。我们想要添加的一个新检查是通过使用正则表达式检查来识别某个API何时被(潜在地)不正确地使用。

错误用法示例:

代码语言:javascript
复制
BigDecimal.valueOf(someDouble).setScale(3);
someBigDecimalObject.setScale(6);

正确的用法示例:

代码语言:javascript
复制
BigDecimal.valueOf(someDouble).setScale(3, RoundingMode.HALF_UP);
someBigDecimalObject.setScale(1, RoundingMode.HALF_DOWN);

因此,我正在寻找的正则表达式是当“RoundingMode”出现在代码中时,".setScale(“出现在代码中。出现在它之后的某个地方。或者为了更清楚起见,当出现".setScale(“但出现”RoundingMode“时,正则表达式应该为真。不会的。

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-19 17:44:16

在我的脑海中:

代码语言:javascript
复制
(?x: \.setScale \s* \(  (?: (?! \bRoundingMode\b ) [^)] ) * \) )

您希望看到的是...不包含RoundingMode.setScale(...)。进一步解释(假设正则表达式正在由Java处理):

(?x: -引入“空白”模式,以便您可以在正则表达式中填充空格以提高可读性

\.setScale \s* \( -查找包含任意空格的.setScale,然后查找(

现在有趣的事情真正开始了:在每个位置,直到我们遇到尾随的),检查单词RoundingMode是否出现:

(?: -启动一个组,其中包含...

(?! \bRoundingMode\b ) - ...a对单词RoundingMode的负前瞻断言,即如果检测到"RoundingMode“,正则表达式将无法匹配;然后

[^)] -匹配非)字符

) * -根据需要重复上述步骤,直到

\) -检测到结束符")“。

) -最后,关闭(?x:构造。

当然,如果方法调用中有嵌套的(...)表达式,这将不起作用,但是您不能用dodgy模式解决这个问题,您需要一个Java正则表达式来代替

票数 1
EN

Stack Overflow用户

发布于 2011-08-19 15:05:19

您可以使用正则表达式:

代码语言:javascript
复制
\.setScale\(\d+,\s*RoundingMode

See it

票数 1
EN

Stack Overflow用户

发布于 2011-08-19 15:05:44

关于:

代码语言:javascript
复制
\.setScale\(.+RoundingMode
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7118050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档