このような場合、正規表現 (RegEx) は非常に便利です。次の正規表現は文字列形式と一致し、入力のさまざまな変数を分析できます。
([\\w\\s]*?) (\\w*?) have (\\w*?) (effect|impact) (on|in) ([\\w\\s]*?)(\\.)
次のプログラムを実行すると、正規表現マッチャー グループがどのように機能するか、グループ 1 が NP 1、グループ 6 が NP 2 であることがわかります。
public class Regex {
public static void main(String[] args) {
Pattern p = Pattern.compile("([\\w\\s]*?) (\\w*?) have (\\w*?) (effect|impact) (on|in) ([\\w\\s]*?)(\\.)");
String s = "Greenhouse gases can have negative impact on global warming.";
Matcher m = p.matcher(s);
if (m.find()) {
for (int i = 0; i < m.groupCount(); i++) {
System.out.println("Group " + i + ": " + m.group(i));
}
}
}
}
上記の例では、文字列"Greenhouse gases can have negative impact on global warming."
が分析されます。以下は、プログラムの出力です。
Group 0: Greenhouse gases can have negative impact on global warming.
Group 1: Greenhouse gases
Group 2: can
Group 3: negative
Group 4: impact
Group 5: on
Group 6: global warming