Newsgroup: it.comp.java
Titolo: espressioni regolari

Ciao!
mi serve un'espressione regolare per trovare i link in una pagina web.
Ho provato tutto quello che mi è venuto in mente e nessuna funziona.
Ad esempio:
<\\s*a [\\S|\\s]*>
<\\s*a .*>
<\\s*a [.]*>
<\\s*a [^>]*>
... e tante altre che non vi sto a dire ;)
Qualcuno mi saprebbe fare quella giusta? 
Grazie!
Matteo
-- 
chi sono e soprattutto chi non sono:
http://www.ilnomedeldominio.it
un piccolo programma per studenti universitari:
http://inutility.ilnomedeldominio.it

 <\\s*a .*>
prova questa:
"<\\s*a\\s+.*>"
credo che tu non possa deliberatamente inserire spazi all'interno di 
espressioni regolari.
Non so, inoltre, se le parentesi angolari possano essere inserite 
direttamente o con la doppia barra "\\<" e "\\>". Devi vedere se sono 
considerati caratteri speciali.
Ciao!

 considerati caratteri speciali.
No, non sono caratteri speciali. Se uso "<" funziona (mi trova tutti le
parentesi angolari aperte).
Comincio a pensare che è meglio se cambio sistema. Però vorrei tanto capire
perché non funziona. Ho anche provato:
"<\\s*a\\s+[^>]*>
Ma niente, sia con la tua che con questa qualche tag lo trova e qualcuno lo
salta.
Grazie cmq


ti allego un codice di prova...
puoi aprire una pagina .html e inserire una regular-expression
per testare i risultati
io ho provato questa e funge abbastanza bene
<a href="(http://[a-zA-Z0-9.-_:/]+)"
può essere molto perfezionata, ovvio ;-)
-----------------------------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import java.util.regex.*;
public class FindText extends JFrame {
    String text;
    EditorKit kit1 = new HTMLEditorKit();
    Document doc1 = kit1.createDefaultDocument();
    JPanel jPanel1 = new JPanel();
    JPanel jPanel2 = new JPanel();
    JPanel jPanel3 = new JPanel();
    JButton jButtonApri = new JButton();
    JEditorPane editor1;
    JScrollPane jScrollPane1 = new JScrollPane();
    JButton Trova = new JButton();
    JTextField jTextFieldPattern = new JTextField();
    JTextPane jTextPane1 = new JTextPane();
    JLabel jLabel1 = new JLabel();
    JScrollPane jScrollPane2 = new JScrollPane();
    JButton jButtonClear = new JButton();
    JLabel jLabel2 = new JLabel();
    BorderLayout borderLayout1 = new BorderLayout();
    public FindText() {
        try {
            jbInit();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void jbInit() throws Exception {
        jButtonApri.setPreferredSize(new Dimension(100, 23));
        jButtonApri.setText("Apri");
        jButtonApri.addActionListener(new FindText_jButtonApri_actionAdapter(this));
        jScrollPane1.setBorder(BorderFactory.createEtchedBorder());
        jScrollPane1.setPreferredSize(new Dimension(1000, 400));
        Trova.setPreferredSize(new Dimension(100, 23));
        Trova.setText("Trova");
        Trova.addActionListener(new FindText_Trova_actionAdapter(this));
        jTextFieldPattern.setPreferredSize(new Dimension(360, 20));
        jTextFieldPattern.setText("");
        jTextPane1.setBorder(BorderFactory.createEtchedBorder());
        jTextPane1.setPreferredSize(new Dimension(800, 200));
        jTextPane1.setText("");
        jLabel1.setText("Links:");
        jPanel2.setLayout(borderLayout1);
        jPanel2.setPreferredSize(new Dimension(600, 230));
        jScrollPane2.setPreferredSize(new Dimension(800, 202));
        this.addWindowListener(new FindText_this_windowAdapter(this));
        jButtonClear.setPreferredSize(new Dimension(100, 23));
        jButtonClear.setText("Clear");
        jButtonClear.addActionListener(new FindText_jButtonClear_actionAdapter(this));
        jLabel2.setPreferredSize(new Dimension(30, 15));
        jLabel2.setText("");
        this.getContentPane().add(jPanel1, BorderLayout.CENTER);
        jPanel1.add(jScrollPane1, null);
        jScrollPane1.getViewport().add(editor1, null);
        this.getContentPane().add(jPanel2, BorderLayout.SOUTH);
        jPanel2.add(jLabel1, BorderLayout.NORTH);
        jPanel2.add(jScrollPane2, BorderLayout.CENTER);
        jScrollPane2.getViewport().add(jTextPane1, null);
        this.getContentPane().add(jPanel3, BorderLayout.NORTH);
        jPanel3.add(jButtonApri, null);
        jPanel3.add(jButtonClear, null);
        jPanel3.add(jLabel2, null);
        jPanel3.add(Trova, null);
        jPanel3.add(jTextFieldPattern, null);
    }
    void apri(String file) {
        doc1 = kit1.createDefaultDocument();
        doc1.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
        Reader rd1 = null;
        try {
            rd1 = new FileReader(file);
            // Parse the HTML.
            try {
                kit1.read(rd1, doc1, 0);
            }
            catch (BadLocationException ex1) {
                ex1.printStackTrace();
            }
            catch (IOException ex1) {
                ex1.printStackTrace();
            }
            // Crea l'editor e gli attacca il kit e il documento
            editor1 = new JEditorPane();
            editor1.setPreferredSize(new Dimension(900, 500));
            editor1.setEditorKit(kit1);
            editor1.select(1000, 1020);
            editor1.setDocument(doc1);
            jScrollPane1.getViewport().add(editor1, null);
        }
        catch (FileNotFoundException ex) {
            editor1 = new JEditorPane();
            editor1.setPreferredSize(new Dimension(500, 500));
            editor1.setText("File della Guida non trovato");
        }
    }
    void find(String st) {
        Pattern p = Pattern.compile(st);
        Matcher m = p.matcher(editor1.getText());
        jTextPane1.setText("");
        while (m.find()) {
            jTextPane1.setText(jTextPane1.getText() + "\n" + m.group(1));
        }
    }
    void Trova_actionPerformed(ActionEvent e) {
        System.out.println("pattern: " + jTextFieldPattern.getText());
        find(jTextFieldPattern.getText());
    }
    void jButtonApri_actionPerformed(ActionEvent e) {
        String file = "";
        String[] filters = {"htm", "html", "txt", "rtf", "doc"};
        FileFilter2 filter = new FileFilter2(filters, "File di testo");
        File f = new File(".");
        JFileChooser chooser = new JFileChooser(f);
        chooser.setFileFilter(filter);
        int returnVal = chooser.showOpenDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = chooser.getSelectedFile().getAbsolutePath();
            apri(file);
        }
    }
    public static void main(String[] args) {
        FindText ft = new FindText();
        ft.setExtendedState(MAXIMIZED_BOTH);
        ft.show();
    }
    void this_windowClosing(WindowEvent e) {
        System.exit(0);
    }
    void jButtonClear_actionPerformed(ActionEvent e) {
        editor1.setText("");
    }
}
class FindText_Trova_actionAdapter implements java.awt.event.ActionListener {
    FindText adaptee;
    FindText_Trova_actionAdapter(FindText adaptee) {
        this.adaptee = adaptee;
    }
    public void actionPerformed(ActionEvent e) {
        adaptee.Trova_actionPerformed(e);
    }
}
class FindText_jButtonApri_actionAdapter implements java.awt.event.ActionListener {
    FindText adaptee;
    FindText_jButtonApri_actionAdapter(FindText adaptee) {
        this.adaptee = adaptee;
    }
    public void actionPerformed(ActionEvent e) {
        adaptee.jButtonApri_actionPerformed(e);
    }
}
class FindText_this_windowAdapter extends java.awt.event.WindowAdapter {
    FindText adaptee;
    FindText_this_windowAdapter(FindText adaptee) {
        this.adaptee = adaptee;
    }
    public void windowClosing(WindowEvent e) {
        adaptee.this_windowClosing(e);
    }
}
class FindText_jButtonClear_actionAdapter implements java.awt.event.ActionListener {
    FindText adaptee;
    FindText_jButtonClear_actionAdapter(FindText adaptee) {
        this.adaptee = adaptee;
    }
    public void actionPerformed(ActionEvent e) {
        adaptee.jButtonClear_actionPerformed(e);
    }
}