正则表达式:搜索字符串在确切的行数上延伸

时间:2014-11-27 15:14:06

标签: java regex full-text-search eclipse-kepler

我想搜索以下字符串:

cast('"
                        + object.method()
                        + "' as datetime 

上面的代码块可以只有一行或两行所以下面的表达式:

cast('" + object.method()+"' as datetime   

cast('"
                            + object.method()+ "' as datetime   

也是很好的比赛。

所以我用下面的表达式作为正则表达式:

(?s)(?i)cast.*?datetime  

但我要匹配的字符串不应超过 3行
如何在正则表达式中表达这种情况?

提前谢谢。

3 个答案:

答案 0 :(得分:2)

正则表达式怎么样

cast([^\n]+\n){0,2}.*datetime

示例:http://regex101.com/r/hQ9xT1/1

  • [^\n]+\n匹配\n后跟\n

  • 以外的任何内容
  • {0,2}量词量化表达式最大值 2次,即匹配2行

  • .*在最后一行匹配anthing

  • datetime匹配datetime

答案 1 :(得分:2)

cast[^\n]+\n[^\n]+\n[^\n]*datetime

试试这个。看看演示。

http://regex101.com/r/hQ9xT1/2

编辑:

使用

cast([^\n]+\n){0,2}[^\n]*datetime

如果您想将13行匹配。

http://regex101.com/r/hQ9xT1/4

答案 2 :(得分:1)

cast(.+([\n])?){1,3}datetime

匹配cast一次*

匹配任意一组字符(分钟为1),后跟0或1个新行(.+([\n])?)

至少匹配上述群组一次,但不超过{1,3}

的3倍

匹配单词datetime一次*

*虽然我已经指出“匹配一次”我的意思是关于模式的文字匹配,如果您使用全局修饰符,则此表达式将允许您的文本中的上述搜索模式的多个匹配。