|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2009
Messaggi: 137
|
[JAVA] Espressioni regolari stile xml
Sto creando un programma per gestire gli ebook, per gestirli creo un file txt con il nome dell'ebook.
Il file dove contenere qualcosa del genere: Codice:
<title>Mio libro</title><year>2012</year><home>Mia casa</home> Ringrazio tutte le persone che mi aiuteranno. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
cerca qualche lib gia pronta.
Estrarre da tag con sole regex è pericoloso..
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Scusa la fretta, ma oggi l'impianto sta facendo i capricci e devo fare una modifica molto pesante.
Per questo motivo, la regex che ti propongo l'ho provata solo usando vim, non Java: Codice:
\(<title>\)\([^<]*\)\(<\/title>\) Questa regex cerca le stringhe in formato <title>...</title> e suddivide la stringa trovata in 3 gruppi: il primo gruppo conterra' <title>, il secondo il titolo ed il terzo </title> Per quanto ne so, Java puo' manipolare i gruppi (non l'ho mai provato, pero'), basta guardare qui: http://docs.oracle.com/javase/tutori...ex/groups.html Puoi quindi estrarre i dati dal secondo gruppo
__________________
In God we trust; all others bring data |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jan 2009
Messaggi: 137
|
Ho provato il codice di sottovento ma non funziona, comunque lo ringrazio per l'aiuto.
Ultima modifica di Tecnomiky : 27-02-2013 alle 09:43. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Se non hai fretta lo posso fare stasera, quando torno a casa
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Che casino 'ste regexp in Java!
Secondo me è meglio scriversi un bel pushdown automaton ad hoc. Il codice viene un po' più lungo ma più leggibile, ma più efficiente. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
non tantissimo.
Il fatto è che solo in Perl sono una parte del linguaggio. Cmq anche il link consiglia di usare librerie apposite. Il parsing xml è insidioso con regex
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Codice:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
String xml = "questa è la stringa xml con <title>Titolo</title> dentro";
Pattern TITLE = Pattern.compile("<title>([^<]+)</title>");
Matcher matcher = TITLE.matcher(xml);
while (matcher.find()) {
System.out.println("Titolo: " + matcher.group(1));
}
}
}
|
|
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Praticamente bisognerà confrontare i tempi della soluzione proposta da Vicius col mio pushdown automaton.
Secondo me vince l'automa: http://swtch.com/~rsc/regexp/regexp1.html Naturalmente il confronto andrà fatto su un file di grosse dimensioni(o su tantissimi file di piccole-medie dimensioni). Ne verrà fuori una sorta di mini-contest. |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Jan 2009
Messaggi: 137
|
Ho provato ma mi esce questo
Codice:
<title>Mio libro</title> Codice:
<title>Mio libro</title><year>2012</year><home>Mia casa</home> |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Posta il codice completo che hai usato e poi vediamo cosa hai sbagliato. |
|
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Cmq sono d'accordo, la regex deve funzionare cosi' com'e'. @Tecnomiky - hai copiato correttamente il codice? Sembra che ti sia dimenticato di mettere l'1 nell'istruzione Codice:
System.out.println("Titolo: " + matcher.group(1));
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Jan 2009
Messaggi: 137
|
Non avevo aggiunto l' 1 dentro alla parentesi del matcher.group
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Dunque, per fare un confronto dovresti scrivere un software che PRIMA accetti in ingresso un automa qualunque, specificato nel modo che vuoi tu, e poi ne confronti i tempi. Cosi' puoi vedere quanto le prestazioni dipendono dall'implementazione e non da restrizioni che hai imposto da una parte e non dall'altra
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Jan 2009
Messaggi: 137
|
Comunque ho risolto grazie all'aiuto di sottovento. Si può chiudere
|
|
|
|
|
|
#18 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Io dico che con una implementazione ad hoc, senza dunque dover creare al volo l'automa per una generica regexp, il programma(in Java stesso, non in C) sarebbe più efficiente. |
|
|
|
|
|
|
#19 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Ho capito di non aver capito: se voglio cercare una determinata stringa data in ingresso dall'utente, e tale stringa e' una regexp, cosa proponi di fare?
__________________
In God we trust; all others bring data |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:53.




















