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")