【问题标题】:This pattern matches for input 123456789.2.2.2 , which it should not [duplicate]此模式匹配输入 123456789.2.2.2 ,它不应该 [重复]
【发布时间】:2017-04-03 19:08:25
【问题描述】:

我正在尝试解决以下任务:

匹配模式 abc.def.ghi.jkl,其中每个变量 a,b,c,d,e,f,g,h,i,j,k,l 可以是除换行符以外的任何单个字符。

对于上述问题,我将输入匹配到正则表达式:

 "([^\\n]{3}(.)){3}([^\\n]{3})"
 // this is the regex pattern I am using currently

我做错了什么?请帮助我更正上述正则表达式,使其与我在标题中提供的错误输入不匹配。目前它以某种方式与之匹配。虽然我提供了 3 个,但它显然匹配了 3 个以上的字符。

【问题讨论】:

  • 您还需要引用 . 否则它匹配任何字符。
  • 你想通过(.)实现什么?你确定这是正确的做法吗?是什么让你这么认为?
  • 但我没有在 .因此它应该作为一个简单的点工作,不是吗?
  • @vibhorvaish: "因此它应该作为一个简单的点工作,不是吗" 不,正则表达式中未转义的 . 表示“这里的任何字符。 "

标签: java regex string


【解决方案1】:

. 在正则表达式模式中具有特殊含义。

如果你想得到一个“简单的点”,你需要引用/转义它(如"\\.")。

并且那个特殊含义是(在正常配置下)“除换行符之外的任何字符”,它与您的其他条件完全匹配,因此您可以将其简化为

"(...)\\.(...)\\.(...)\\.(...)"

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多