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

Regex 如何匹配正则表达式中句点和分号之间的任何字符?,regex,Regex,如何匹配正则表达式中句号和分号之间的任何字符,包括空格、回车和其他句号以及特殊字符(包括括号) 例如,假设: SomeMethod().AnotherMethod("argument") .AnotherMethod(1, "arg"); 我希望能够匹配: .AnotherMethod("argument") .AnotherMethod(1, "arg"); \([^;]*)似乎符合要求 请注意,您所问的问题可能比您真正需要的更简单:您可能希望从SomeMethod

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

例如,假设:

SomeMethod().AnotherMethod("argument")
      .AnotherMethod(1, "arg");
我希望能够匹配:

.AnotherMethod("argument")
      .AnotherMethod(1, "arg");
\([^;]*)似乎符合要求

请注意,您所问的问题可能比您真正需要的更简单:您可能希望从
SomeMethod().AnotherMethod(“foo;bar;and baz”).AnotherMethod(1)得到类似的结果
,但是您请求的正则表达式将在第一个
处停止
\([^;]*)似乎符合要求

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

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

[.]
只是另一种转义
字符的方法,传统上使用
\.

转义
[.](.*)
[.]([^;]*)

[.]
只是另一种转义
字符的方法,传统上使用
\.

\.([^;]*)按照原始规范工作,但很快就会遇到问题

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

以下是一个起点(在ruby中):

但是,如果您在所编写的语言中找不到内置的函数/参数解析器,那么它有望让您从正确的方向开始按照原始规范工作,但很快就会遇到问题

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

以下是一个起点(在ruby中):


但是,如果您无法在正在编写代码的语言中找到内置函数/参数解析器,那么它有望让您从正确的方向开始。

请指定您的语言/风格。
\([^;]*)根据规范工作。。。但是我想问一下当你有一个
somethod(“With(a;Funky”,“arg\“ument”);
?请指定你的语言/风格。
\([^;]*);
按照规范工作……但是我想问一下当你有一个
somethod(“With(a;Funky”,“arg\“ument”)时会发生什么;
?第一个版本在长输入字符串上的性能比第二个版本差得多。我不会向任何人推荐。[.]([^;]*);工作正常,但如上所述,只拾取第二行,不检测回车。第一个版本在长输入字符串上的性能比第二个版本差得多。我不会向任何人推荐。[.]([^;]*);工作,但如上所述,仅拾取第二条线路,不检测车厢returns@jimmy_terra:我建议将来使用(或类似的工具)来验证你的正则表达式。它提供了很好的概述(如组)+很好的快速参考。它确实是一项资产(我也是正则表达式的初学者)。你的正则表达式中不使用点,所以没有需要“点匹配换行符”模式。
[^;]
实际上匹配除“;”之外的所有字符。哈,你说得对!我只是假设我使用了点。我会编辑掉它。当你使用
SomeMethod(“With(a;Funky”,“arg\”ument)时会发生什么
?这几乎可以工作了-但是它不能跨行工作,所以它选择了
.AnotherMethod(1,“arg”);
好的,但上面的行也不行…@jimmy_terra:我建议将来使用(或类似的工具)来验证您的正则表达式。它提供了很好的概述(例如组)+非常好的快速参考。它真的是一项资产(我也是一名正则表达式初学者)。您的正则表达式中不使用点,因此不需要“点匹配换行符”模式。
[^;]
确实匹配除“;”之外的所有字符。”包括换行符。哈,你说得对!我只是假设我用了一个点。我会把它编辑掉。当你有一个
SomeMethod(“With(a;Funky,,'arg\'ument”);
?这几乎起作用了-它不会跨行工作,所以它会选择
.AnotherMethod(1,“arg”);
好的,但上面的那一行也不行。。。
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")