入力の適切なパラメータで使用replaceAll()
します。
input.replaceAll(".*(?<=^|\\s)(\\w+\\(.*?\\)).*", "$1");
この正規表現は、グループ1で(「後ろを振り返る」を使用して)保持したいものと一致しますが、入力全体を一致させ、それをグループ1に置き換えます。これにより、保持したいものを置き換えるのではなく、保持します。
すべてのサンプルを含むテストコードを次に示します。
public static void main(String[] args) throws Exception {
String[] examples = {
"RuleResult executeRule(RuleData, RuleProperties, Locale) { /* some key */ }",
"RuleResult executeRule() { /* some key */ }",
"executeRule(RuleData, RuleProperties, Locale) { /* some key */ }",
"executeRule() { /* some key */ }",
"static executeRule(RuleData, RuleProperties, Locale) { /* some key */ }",
"static executeRule() { /* some key */ }" };
for (String example : examples) {
System.out.println(example + "\n// result: " +
example.replaceAll(".*(?<=^|\\s)(\\w+\\(.*?\\)).*", "$1") + "\n");
}
}
出力:
RuleResult executeRule(RuleData, RuleProperties, Locale) { /* some key */ }
// result: executeRule(RuleData, RuleProperties, Locale)
RuleResult executeRule() { /* some key */ }
// result: executeRule()
executeRule(RuleData, RuleProperties, Locale) { /* some key */ }
// result: executeRule(RuleData, RuleProperties, Locale)
executeRule() { /* some key */ }
// result: executeRule()
static executeRule(RuleData, RuleProperties, Locale) { /* some key */ }
// result: executeRule(RuleData, RuleProperties, Locale)
static executeRule() { /* some key */ }
// result: executeRule()
サンプルデータによく似ています:)