Autore Topic: Problema regex  (Letto 422 volte)

Offline overflow

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei G 330
  • Sistema operativo:
    OS X 10.8.4
Problema regex
« il: 28 Agosto 2013, 12:12:10 CEST »
0
Salve, ho un problema con un'espressione regolare il codice è questo
Codice (Java): [Seleziona]
String regex = "\\(mp3=)(.*.mp3)";
                        Pattern p = Pattern.compile(regex);
                        Matcher m = p.matcher(furl);
                        while(m.find()) {
                                String urlStr = m.group();
                                if (urlStr.startsWith("(") && urlStr.endsWith(")"))
                                {
                                urlStr = urlStr.substring(1, urlStr.length() - 1);
                                }
                                name.add(urlStr);
                                }

la stringa in entrata è questa:

Codice: [Seleziona]
ttp://myurl.com/download/grabber/?mp3=File_name.mp3&s=4

ed in uscita mi servirebbe

Codice: [Seleziona]
File_name.mp3

non ho capito perché il mio codice dia errore, questo è il logcat:

Codice: [Seleziona]
08-28 11:53:20.067: D/OpenGLRenderer(3038): Flushing caches (mode 0)
08-28 11:53:20.307: D/OpenGLRenderer(3038): Flushing caches (mode 1)
08-28 11:58:18.847: I/Process(3038): Sending signal. PID: 3038 SIG: 9
08-28 12:02:23.157: D/ViewRootImpl(3578): pckname = com.mfweb.mp3downloader
08-28 12:02:23.257: I/dalvikvm(3578): threadid=3: reacting to signal 3
08-28 12:02:23.387: I/dalvikvm(3578): Wrote stack traces to '/data/anr/traces.txt'
08-28 12:02:23.467: D/libEGL(3578): loaded /system/lib/egl/libEGL_mali.so
08-28 12:02:23.477: D/libEGL(3578): loaded /system/lib/egl/libGLESv1_CM_mali.so
08-28 12:02:23.487: D/libEGL(3578): loaded /system/lib/egl/libGLESv2_mali.so
08-28 12:02:23.517: D/OpenGLRenderer(3578): Enabling debug mode 0
08-28 12:02:24.227: W/dalvikvm(3578): threadid=11: thread exiting with uncaught exception (group=0x409d31f8)
08-28 12:02:24.247: E/AndroidRuntime(3578): FATAL EXCEPTION: AsyncTask #1
08-28 12:02:24.247: E/AndroidRuntime(3578): java.lang.RuntimeException: An error occured while executing doInBackground()
08-28 12:02:24.247: E/AndroidRuntime(3578):         at android.os.AsyncTask$3.done(AsyncTask.java:278)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.lang.Thread.run(Thread.java:856)
08-28 12:02:24.247: E/AndroidRuntime(3578): Caused by: java.util.regex.PatternSyntaxException: Incorrectly nested parentheses in regexp pattern near index 7:
08-28 12:02:24.247: E/AndroidRuntime(3578): \(mp3=)(.*.mp3)
08-28 12:02:24.247: E/AndroidRuntime(3578):        ^
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.regex.Pattern.compileImpl(Native Method)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.regex.Pattern.compile(Pattern.java:400)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.regex.Pattern.<init>(Pattern.java:383)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.regex.Pattern.compile(Pattern.java:374)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at com.mfweb.mp3downloader.MainActivity$AsyncDownload.downloader(MainActivity.java:129)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at com.mfweb.mp3downloader.MainActivity$AsyncDownload.doInBackground(MainActivity.java:97)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at com.mfweb.mp3downloader.MainActivity$AsyncDownload.doInBackground(MainActivity.java:1)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at android.os.AsyncTask$2.call(AsyncTask.java:264)
08-28 12:02:24.247: E/AndroidRuntime(3578):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-28 12:02:24.247: E/AndroidRuntime(3578):         ... 5 more

edit--
la stringa in entrata è questa
http://myurl.com/download/grabber/?mp3=File_name.mp3&s=4
« Ultima modifica: 28 Agosto 2013, 12:14:10 CEST da overflow »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema regex
« Risposta #1 il: 28 Agosto 2013, 12:29:48 CEST »
0
il tuo pattern "\\(mp3=)(.*.mp3)"
va a cercare il carattere "(" e poi ha una parentesi chiusa.
se tu vuoi:

la stringa in entrata è questa:
Codice: [Seleziona]
ttp://myurl.com/download/grabber/?mp3=File_name.mp3&s=4
ed in uscita mi servirebbe

Codice: [Seleziona]
File_name.mp3

allora puoi fare:

"(?:.*)(?:mp3=)(.*\\.mp3)(?:.*)"

poi nel codice fai:
Codice (Java): [Seleziona]
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(stringadaverificare);
if (matcher.matches()) {
 String filename = matcher.group(1);
}
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia