Reguläre Ausdrücke - maskieren von Zeichen?

Status
Nicht offen für weitere Antworten.

muemmel_0811

Bekanntes Mitglied
Hi zusammen,

ich kapier leider das wann und was Maskieren der Sonderzeichen noch nicht so wirklich, wenn ich nach einem regulären Ausdruck suche.
Bspw. möchte ich diesen kleinen String in ca. 15.000 html-Dateien suchen: name="navoben"
Mit RegexBuddy erhalte ich 6890 Treffer und mit meinem kleinen Java-Prog 6897 Treffer. Ich weiß der Unterschied ist nicht so vehement, aber trotzdem ist er da...

Hier der relevante Code-Teil:
Code:
String regMus = p.txtSuch.getText();
Pattern pa = Pattern.compile(regMus, Pattern.CASE_INSENSITIVE);
Matcher ma = pa.matcher(p.taHtml.getSelectedText());
Muss ich jetzt " maskieren oder nicht und wenn ja, wieviele \ brauch ich dafür?
Gibt's außerdem irgendwo eine Übersicht welche Zeichen generell maskiert werden müssen?

Danke und Grüße,
muemmel
 
B

bygones

Gast
im grunde recht einfach... alle sonderzeichen (ich nenns mal so) muessen maskiert werden..

also die ganzen regex zeichen wie + * . \ [ usw.
 

muemmel_0811

Bekanntes Mitglied
Danke Euch beiden, aber irgendwie kapier ich's nicht...
wenn ich nach \\\"navoben\\\" suche bekomm ich 0 Treffer, wenn ich nach \"navoben\" suche sind's 6897, also genau soviele wie bei "navoben" ???:L

Und was ich ja so gar nicht verstehe ist, sind die Abweichungen zwischen RegexBuddy und meinem kleinen Prog...
hier mal der gesamte Code:
Code:
package pack;

import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.*;

public class Suche extends JFrame{
	private static final long serialVersionUID = 1L;
	Pan p = new Pan();
	
	Suche() {
		super();
		setTitle("Suche");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		initLaF();
		setLayout(new BorderLayout());
		getContentPane().add(p, BorderLayout.CENTER);
	}
	
	public class Pan extends JPanel {
		private static final long serialVersionUID = 1L;
		JLabel lblDir = new JLabel("Verzeichnis:");
		JTextField txtDir = new JTextField();
		JButton btnDir = new JButton("...");
		JLabel lblSuch = new JLabel("Suche:");
		JTextField txtSuch = new JTextField();
		JLabel lblRep = new JLabel("Ersetze:");
		JTextField txtRep = new JTextField();
		JButton btnGo = new JButton("go !");
		JTextArea taHtml = new JTextArea(10,40);
		JScrollPane scroll = new JScrollPane();

		
		
		Pan() {
			super();
			setLayout(null);
			lblDir.setBounds(10,10,60,20);
			add(lblDir);
			txtDir.setBounds(80,10,560,20);
			add(txtDir);
			btnDir.setBounds(650,10,30,20);
			add(btnDir);
			btnDir.addActionListener(new GetDir());
			lblSuch.setBounds(10,50,60,20);
			add(lblSuch);
			txtSuch.setBounds(80,50,560,20);
			add(txtSuch);
			lblRep.setBounds(10,80,60,20);
			add(lblRep);
			txtRep.setBounds(80,80,560,20);
			add(txtRep);
			btnGo.setBounds(20,110,100,30);
			add(btnGo);
			btnGo.addActionListener(new ButGo());
			scroll.setBounds(10,160,670,300);
			scroll.setViewportView(taHtml);
			add(scroll);
		}
	}
	
	class GetDir implements ActionListener{
		public void actionPerformed(ActionEvent ae) {
			JFileChooser fc = new JFileChooser();
			fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
			int option = fc.showOpenDialog(p);
			if(option == JFileChooser.APPROVE_OPTION) {
				String pfad = fc.getSelectedFile().getAbsolutePath();
				p.txtDir.setText(pfad);
			}
		}
	}
	
	class ButGo implements ActionListener {
		public void actionPerformed(ActionEvent ae) {
			String x = p.txtDir.getText();
			Pattern pat = Pattern.compile("\\\\");
			Matcher mat = pat.matcher(x);
			if(mat.find() == true) {
				String resPfad = mat.replaceAll("\\\\\\\\");
				File f = new File(resPfad);
				listen(f);
				System.out.println("###############################\nFERTIG!\n################################");
			}
		}
	}
	
	class DateiFilter implements FileFilter {
		private String ende1, ende2, ende3, ende4;
		public DateiFilter(String endung1, String endung2, String endung3, String endung4) {
			ende1 = endung1;
			ende2 = endung2;
			ende3 = endung3;
			ende4 = endung4;
		}
		public boolean accept(File dat) {
			if(dat.isDirectory() == true) {
				return true;
			}
			else {
				if(dat.getName().endsWith(ende1) == true || 
					dat.getName().endsWith(ende2) == true ||
					dat.getName().endsWith(ende3) == true ||
					dat.getName().endsWith(ende4) == true) {
					return true;
				}
				else {
					return false;
				}
			}
		}
	}
	
	int cnt = 0;
	int cntG = 0;
	void listen(File dir) {
		DateiFilter filter = new DateiFilter(".html",".htm",".HTML", ".HTM");
		File[] dateien = dir.listFiles(filter);
		if(dateien != null) {
			for(int i=0; i<dateien.length; i++) {
				if(dateien[i].isDirectory()) {
					listen(dateien[i]);
				}
				if(dateien[i].isFile() && dateien[i].length() < 1000000) {
					cntG++;
					try {
						BufferedReader rein = new BufferedReader(new FileReader(dateien[i]));
						StringBuffer puffer = new StringBuffer();
						String zeile;
						while((zeile = rein.readLine()) != null) {
							puffer.append(zeile);
							puffer.append('\n');
						}
						rein.close();
						String inhalt = new String(puffer);
						p.taHtml.setText("");
						p.taHtml.setText(inhalt);
						p.taHtml.setCaretPosition(0);
						p.taHtml.selectAll();
						String regMus = p.txtSuch.getText();
						String repText = p.txtRep.getText();
						Pattern pa = Pattern.compile(regMus, Pattern.CASE_INSENSITIVE);
						Matcher ma = pa.matcher(p.taHtml.getSelectedText());
						if(ma.find() == true) {
							cnt++;
						}
					}
					catch(Exception e) {
						e.printStackTrace();
					}
				}
			}
		}
		System.out.println("Dateien gefunden: " + cnt + " - Dateien gesamt: " + cntG);
	}
	
	
	
	public void initLaF() {
		try {
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			SwingUtilities.updateComponentTreeUI(this);
			SwingUtilities.updateComponentTreeUI(p);
		}
		catch(Exception c){
		}
	}
	public static void main(String[] args) {
		Suche fm = new Suche();
		fm.setSize(700,500);
		fm.setLocation(270,140);
		fm.setVisible(true);
		fm.setResizable(false);
	}
}

Und ja, ich weiß, dass ich das 2. Textfeld gerade nicht benutze - bin aber zu faul jedes mal die GUI umzubasteln, nur um was auszuprobieren...

Grüße,
muemmel
 

muemmel_0811

Bekanntes Mitglied
Hallo Wildcard,

Danke für den Hinweis, aber das macht in diesem Falle gar nix, da ich das Tool nur in der Arbeit brauch und da gibt's nur Windows...
Aber soweit mir bekannt schaltet Java das L'n'F doch automatisch auf das Java-L'n'F, falls es sich um ein anderes OS handelt - mein ich zumindest mal irgendwo gelesen zu haben.

Grüße,
muemmel
 

Wildcard

Top Contributor
Naja, du bekommst eine ClassNotFoundException und die Anweisung wird dementsprechend nicht ausgeführt, aber es würde dir kein Zacken aus der Krone fallen wenn du dir direkt UIManager.getSystemLookAndFeelClassName angewöhnen würdest.
 

muemmel_0811

Bekanntes Mitglied
OK, hast Recht!
Zu meiner Schande muss ich ja gestehen, dass ich UIManager.getSystemLookAndFeelClassName noch nicht über den Weg gelaufen bin :oops:

Aber was ist denn mit meinem eigentlichen Problem - kannst Du mir sagen, warum ich in RegexBuddy ein paar weniger Treffer hab, als mit meinem kleinen Prog?

Grüße,
muemmel
 
S

SlaterB

Gast
Tipp: untersuche die ersten 3000 Zeilen und die zweiten 3000,
da wo noch ein Unterschied besteht, untersuche jeweils 1500,
750
375
190
100
50
25
13
7
4
2
1
dann hast du die Zeile, in der mal x und mal y Treffer gefunden wird,
poste diese Zeile

falls die Zeile aus über 1000 Zeichen besteht, weißt du ja, wie du wieder vorgehen musst ;)

edit: sind nicht 6000 Zeilen, sondern 15.000 Dateien, aber ist das gleiche Spiel
 

muemmel_0811

Bekanntes Mitglied
Hi zusammen,

so, jetzt hab ich ca. 1,5 h damit verballert, den Unterschied zwischen meinem kleinen Prog und RegexBuddy (manuell) zu finden - und siehe da: mein Prog funktioniert einwandfrei!!!
Es ist RegexBuddy, was bei mir die Probleme verursacht. Und zwar durchsucht RegexBuddy nur Dateien, die nicht mit "backup" im Dateinamen beginnen und was soll ich sagen, natürlich haben wir auf unserem Server ein paar Dateien, die mit diesem Wörtchen beginnen...

Also, alle Aufregung umsonst und ich kann wieder beruhigt weiter regexen :)

Danke noch mal an alle!
muemmel
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Reguläre Ausdrücke Java Basics - Anfänger-Themen 1
W Reguläre Ausdrücke Java Basics - Anfänger-Themen 1
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
K FYI: Reguläre Ausdrücke nutzen ja/nein Java Basics - Anfänger-Themen 2
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
P Reguläre Ausdrücke und Korrektheit Java Basics - Anfänger-Themen 2
0 Reguläre Ausdrücke bzw. Zahlenformat im String Java Basics - Anfänger-Themen 7
G Reguläre Ausdrücke Zeichenketten Java Basics - Anfänger-Themen 12
C Klassen Reguläre Ausdrücke auf Gleichheit prüfen Java Basics - Anfänger-Themen 5
J Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
C Reguläre-Ausdrücke Java Basics - Anfänger-Themen 5
J reguläre Ausdrücke Java Basics - Anfänger-Themen 1
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
H Erste Schritte Von jpg zu jpeg // reguläre Ausdrücke Java Basics - Anfänger-Themen 3
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 6
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
C Reguläre Ausdrücke: string.matches() und gefangene Gruppen Java Basics - Anfänger-Themen 12
S Reguläre Ausdrücke richtig einsetzten Java Basics - Anfänger-Themen 5
T Reguläre Ausdrücke Java Basics - Anfänger-Themen 18
0 Reguläre Ausdrücke und Funktionen Java Basics - Anfänger-Themen 2
D Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
S Reguläre Ausdrücke Java Basics - Anfänger-Themen 16
A Reguläre Ausdrücke Frage Java Basics - Anfänger-Themen 3
E Reguläre Ausdrücke mit sehr variablen Eigenschaften Java Basics - Anfänger-Themen 2
N Reguläre Ausdrücke - bekomme Suchkriterium nicht hin Java Basics - Anfänger-Themen 3
J Reguläre Ausdrücke in Java Java Basics - Anfänger-Themen 2
J Reguläre Ausdrücke Java Basics - Anfänger-Themen 6
S Strings und reguläre Ausdrücke Java Basics - Anfänger-Themen 2
N Reguläre Ausdrücke Java Basics - Anfänger-Themen 4
S Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
M Reguläre ausdrücke? Java Basics - Anfänger-Themen 8
D Reguläre Ausdrücke: Anzahl Wiederholungen als Variable? Java Basics - Anfänger-Themen 3
A Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
M Reguläre Ausdrücke und Ausgabe Java Basics - Anfänger-Themen 10
K Reguläre Ausdrücke - Gefundene Tokens direkt ermitteln Java Basics - Anfänger-Themen 3
J Reguläre Ausdrücke: Zeichenfolge ausschließen Java Basics - Anfänger-Themen 2
G Reguläre Ausdrücke Java Basics - Anfänger-Themen 13
L java und reguläre ausdrücke Java Basics - Anfänger-Themen 4
G Reguläre Ausdrücke zum Filtern von logfiles Java Basics - Anfänger-Themen 2
T Reguläre Ausdrücke? Java Basics - Anfänger-Themen 3
E Reguläre Ausdrücke Java Basics - Anfänger-Themen 17
O reguläre Ausdrücke bei java.util.regex.Pattern Java Basics - Anfänger-Themen 4
A Reguläre Ausdrücke der Pfade unter Windows und Unix Java Basics - Anfänger-Themen 3
N Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
G Problem reguläre Ausdrücke Java Basics - Anfänger-Themen 4
A Reguläre Ausdrücke: Inhalt zwischen zwei Schlüsselwörtern Java Basics - Anfänger-Themen 2
A Reguläre Ausdrücke: Problem mit Backslash Java Basics - Anfänger-Themen 3
W Reguläre Ausdruck Java Basics - Anfänger-Themen 6
K Warum zeigt dieser reguläre Ausdruck true an? Java Basics - Anfänger-Themen 1
S reguläre Audrücke verbinden Java Basics - Anfänger-Themen 18
N reguläre ausdruech und exception Probleme Java Basics - Anfänger-Themen 7
R Reguläre Ausdruck definieren Java Basics - Anfänger-Themen 3
S Prüfungsvorbereitung Januar ( Thema Ausdrücke ) Java Basics - Anfänger-Themen 14
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
C Boolsche Ausdrücke Java Basics - Anfänger-Themen 3
A Schleifen und Boolsche Ausdrücke Java Basics - Anfänger-Themen 42
G Java Lambda Ausdrücke Java Basics - Anfänger-Themen 19
A Lambda-Ausdrücke Java Basics - Anfänger-Themen 6
G Lambda Ausdrücke Java Basics - Anfänger-Themen 2
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
B Erste Schritte Boolesche Ausdrücke & Gesetze Java Basics - Anfänger-Themen 3
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
D Variablen Ausdrücke Java Basics - Anfänger-Themen 6
M Lambda - Ausdrücke verstehen Java Basics - Anfänger-Themen 2
N Lambda Ausdrücke richtig schreiben Java Basics - Anfänger-Themen 4
F Methoden Lambda Ausdrücke Methodensignatur Java Basics - Anfänger-Themen 6
P Ausdrücke berechnen Java Basics - Anfänger-Themen 2
J Java 8 Lamda ausdrücke Java Basics - Anfänger-Themen 9
C Lambda Ausdrücke Java Basics - Anfänger-Themen 1
TheSorm Java 8 Lambda-Ausdrücke Java Basics - Anfänger-Themen 9
S Anweisungen Ausdrücke Java Basics - Anfänger-Themen 7
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
K Ausdrücke auswerten Java Basics - Anfänger-Themen 8
C Boolsche Ausdrücke - Wo ist mein Fehler? Java Basics - Anfänger-Themen 14
M Boolsche Ausdrücke minimieren Java Basics - Anfänger-Themen 13
S arithmetische Ausdrücke prüfen Java Basics - Anfänger-Themen 11
S Datentypen Operatoren und Ausdrücke (formel richtig rechnen) Java Basics - Anfänger-Themen 8
T Ausdrucksparser für Mathematische Ausdrücke Java Basics - Anfänger-Themen 15
N Ausdrücke Java Basics - Anfänger-Themen 6
W Suche nach strings zwischen eckigen Klammern mittels regulärer Ausdrücke Java Basics - Anfänger-Themen 3
C arithmetische Ausdrücke Java Basics - Anfänger-Themen 7
M regüläre Ausdrücke, die String - Variablen und Expression Java Basics - Anfänger-Themen 5
M Ausdrücke -> Werte Java Basics - Anfänger-Themen 6
A mehrere Ausdrücke in for schleife vergleichen Java Basics - Anfänger-Themen 6
B String anpassen / maskieren Java Basics - Anfänger-Themen 3
StupidAttack "//]]>" maskieren Java Basics - Anfänger-Themen 11
G Benutzereingabe auf Konsole maskieren (Passworteingabe) Java Basics - Anfänger-Themen 4
B String - Parameter maskieren Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben