如何在正则表达式中匹配句点和分号之间的任何字符?

时间:2013-05-03 08:57:15

标签: regex

如何在正则表达式中匹配句点和分号之间的任何字符,包括空格,回车符和其他句点以及包含括号的特殊字符?

例如,给定:

SomeMethod().AnotherMethod("argument")
      .AnotherMethod(1, "arg");

我希望能够匹配:

.AnotherMethod("argument")
      .AnotherMethod(1, "arg");

3 个答案:

答案 0 :(得分:3)

\.([^;]*);似乎符合要求。

请注意,您提出的问题可能比您真正需要的更简单:可能您希望从SomeMethod().AnotherMethod("foo; bar; and baz").AnotherMethod(1);获得类似的结果,但您要求的正则表达式将在第一个{{1}处停止}。

答案 1 :(得分:0)

[.](.*?);[.]([^;]*);

[.]只是另一种逃避.字符的方式,传统上使用\.

进行转义

答案 2 :(得分:0)

\.([^;]*);符合您的原始规范,但您很快就会遇到问题......

在实践中,您需要命名组和递归正则表达式来正确解析它。

这是一个起点(红宝石):

re = %r{
  (?<sstr>      '(?:[^']|(?<=\\)')*?') {0}                    # single quoted
  (?<dstr>      "(?:[^"]|(?<=\\)")*?") {0}                    # double quoted
  (?<nstr>      [^;]*?) {0}                                   # non-string
  (?<arg>       (?:\g<sstr>|\g<dstr>|\g<nstr>|)) {0}          # optional arg
  (?<func>      \s*[a-zA-Z0-9_]+\s*\(\s*\g<arg>\s*\)\s*) {0}  # foo(arg)
  (?<chain>     \g<func>(?:\.\g<func>)*) {0}                  # chained foo(arg)
  ^\g<chain>;                                                 # match until ;
}x

pp re.match 'SomeMethod("With (a; Funky\', arg\"ument");'

请注意,以上仅是部分解决方案。例如,它不会涵盖以下内容:

foo(cond()? 'even' : "more", "; funky")

但如果你没有找到你正在编码的语言中的内置函数/参数解析器,那么它有望让你开始朝着正确的方向前进。