2010-02-14 5 views
1

Je veux écrire un regex pour ce qui suit:Comment utiliser des expressions régulières pour extraire des informations de liens mailto

Pattern1:

mailto: [email protected]

Le regex1 doit correspondre à toutes les chaînes qui commencent par mailto:

Pattern2:

mailto: [email protected] subject = corps indien & = bonjour

Le regex2 doit extraire la chaîne de requête (chaîne après?)

+1

/^ mailto:(.+?)$/? – dangerstat

+0

Pour Q2, voir http://stackoverflow.com/questions/1667278/parsing-query-strings-in-java – kennytm

Répondre

4

Pas besoin de expressions régulières. Il suffit de faire correspondre n'importe quelle chaîne où les sept premiers caractères sont "mailto:".

Si vous insistez pour utiliser des expressions régulières, l'expression sera "mailto:. *". Si vous voulez seulement garder ce qui est après le "mailto:", il serait "mailto: (. *)"

+0

+1 Pourriez-vous s'il vous plaît regarder l'expression rationnelle 2 –

+0

Voulez-vous vraiment utiliser regex pour séparer une requête chaîne? Il y a des librairies spécialement conçues pour cela qui gèrent correctement tous les cas de bords. –

+0

Pour le deuxième cas, voir http://stackoverflow.com/questions/2261222/how-to-use-regular-expressions-to-extract-information-from-mailto-links/2261448#2261448 – Daniel

0
  1. mailto:. + Ou mailto: [^ \ s] +
  2. mailto: .? + \ (. +) ou mailto:? [^ \ s] + \ [^ \ s] +
1

Regex est vraiment pas nécessaire pour cela. Un simple String.startsWith suffirait pour la première correspondance et vous pourriez utiliser la classe URL pour extraire la requête.

String string = "mailto:[email protected]?subject=Indian&body=hello"; 
if (string.startsWith("mailto:")) { 
    try { 
     URL url = new URL(string); 
     String query = url.getQuery(); // Here is your query string. 

    } catch (MalformedURLException e) { 
     throw new AssertionError("This should not happen: " + e); 
    } 
} 
Questions connexes