input1="caused/VBN by/IN thyroid disorder"
"caused"
要件:スラッシュの後に任意の数の大文字のアルファベットが続き、スペース + が続かない単語を見つけます"by/IN
。
上記の例では、 の"caused/VBN"
後に が続く" by/IN"
ため、「caused」は一致しません。
input2="caused/VBN thyroid disorder"
"by/IN"
原因に従わないので、一致するはずです
regex="caused/[A-Z]+(?![\\s]+by/IN)"
caused/[A-Z]+
-- 'caused' という単語 + / + 1 つ以上の大文字
(?![\\s]+by)
-- 否定先読み - スペースと by が一致しない
以下は、私がテストに使用した簡単な方法です
public static void main(String[] args){
String input = "caused/VBN by/IN thyroid disorder";
String regex = "caused/[A-Z]+(?![\\s]+by/IN)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while(matcher.find()){
System.out.println(matcher.group());
}
出力:caused/VB
負の先読み正規表現が機能しない理由がわかりません。