Är det någon som kan skriva ett exempel på ett reguljärt uttryck för att känna igen en mening. Jag försöker nämligen bygga ett litet ordbehandlingsverktyg som ska räkna ut antalet meningar.
import java.util.regex.*;
class re {
private re(){
Pattern p = Pattern.compile(" ?[^!\\?\\.]+[!\\?\\.]+");
String s = "Sträng att matcha!";
Matcher m = p.matcher(s);
int i = 1;
while (m.find()){
System.out.println("----Match " + i++ + "-----");
System.out.println(m.group());
}
}
public static void main(String args[]){
new re();
}
}
Det ser bra ut. Kan du förklara lite vad det reguljära uttrycket matchar, vad menas med det? Jag har precis börjat med java och inte arbetat med reguljära uttryck och skulle gärna få en lite förklaring.
<blanksteg>? - Matcha ett blanksteg (valfritt)
[^!\\?\\.]+ - Följt av ett eller flera tecken (dock ej '!', '?' och '.').
[!\\?\\.]+ - Följt av en eller flera '!', '?' eller '.'
Jag har alltså utgått från att en mening börjar med ett eller inget blanksteg, följt av ett eller flera tecken (dock ej '!', '?' eller '.' [eftersom dessa kan anses avsluta meningar]), följt av en eller flera '!', '?' eller '.' (en mening kan alltså sluta med t.ex. "?!", "?" och "...").
Notera att uttrycket inte är optimalt, då exempelvis följande sträng: Hej (foo?) på dig!, matchas som två meningar istället för en. Dock skulle det troligtvis bli ett komplicerat och tidskrävande arbete att skapa ett optimalt, sådant, reguljärt uttryck.