2017-01-02 3 views
-2

Ich versuche, ein Java-Regex-Muster zu schreiben, um countryname zu entsprechen.java Regex Fangplatz oder &

Das Muster kann

"countryname=brazil 300"

auf zwei Arten in einem String vorkommen

"countryname=brazil&time=10000"

Können Sie mir die beiden Optionen fangen helfen? Ich kann bei Bedarf zwei Muster erstellen.

pattern = Pattern.compile("(.*?)countryname=(.*+)[s,(.*)]"); 
     matcher = pattern.matcher("countryname=brazil "); 
     while (matcher.find()) { 
      System.out.println("group 1: " + matcher.group(1)); 
     } 
+0

Haben Sie versucht, ein einfaches 'pattern = "COUNTRY = (\\ w +)"'? –

+0

Nun, wenn Sie mich fragen, würde ich '" countryname = (\\ w + (?: [^ \ W &] \\ w +) *) "' (oder ersetzen Sie sogar '\ w' mit' \ p { L} ') und greifen Sie auf den Inhalt der Gruppe 1. Allerdings kennen Sie die Daten und wir können nicht testen, ob die Lösung wirklich funktioniert. –

Antwort

0

ich verwenden würde:

(.*?)countryname=([\w-]+)(.*)" 
+0

Im Kontext von 'matcher.find()' sind das führende '(. *?)' Und das nachfolgende '(. *)' Veraltet. Da der Code 'while (matcher.find())' verwendet, muss der nachfolgende '(. *)' Tatsächlich als * falsch * betrachtet werden, da er nachfolgende Vorkommen konsumieren kann (wenn nur ein einziges Vorkommen angenommen wird, 'if') sollte anstelle von "while" verwendet werden) ... – Holger