\.([^;]*);
元の仕様どおりに動作しますが、すぐに問題が発生します...
実際には、これを適切に解析するには、名前付きグループと再帰的な正規表現が必要です。
これが出発点です(ルビーで):
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")
しかし、コーディングしている言語に組み込みの関数/引数パーサーが見つからない場合は、正しい方向に進むことができれば幸いです。