Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Java / Mysql] regex-string in Mysql

Pagina: 1
Acties:

  • RainerSGF
  • Registratie: Juli 2008
  • Laatst online: 14-11 21:17
Ik heb een probleem in mijn java-code waarin ik verschillende regex-en nodig heb om toe te passen op tekst. Deze verschillende regex-en heb ik als een 'varchar' opgeslaan in een Mysql-database (lokaal). Nu vormt het probleem zich op het gebied dat wanneer ik de regex ophaal deze vervolgens niet geïnterpreteerd wordt als een regex-string (ps: er zitten ook slashes in de regex verwerkt). Dus als ik gewoon in mijn code dan zelf manueel deze regex-string intyp, dan heb ik het probleem helemaal niet.

Ik heb al veel geprobeerd om dit opgelost te krijgen, maar zonder resultaat. Het data-type aanpassen naar een 'char' of 'text' haalt niets uit. Ik weet niet of de slashes (ivm ook het gekende 'mysql injection') hiermee kunnen te maken hebben. Zo probeerde ik ook de regex-string aan te passen en van '//' te veranderen naar '////'.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
rgx = temp_data1[r][6].toString(); //de opgehaalde regex-string uit database zit in array
...
//ik roep wat later een methode aan waarin rgx wordt meegegeven als argument
 String regex_found = Regex_Matcher(temp_string.toString(), rgx);
...
//deze methode verwerkt de string-inhoud en zoek erin naar overeenkomsten+stuurt resultaat terug
private String Regex_Matcher(String inhoud, String regx){
        Pattern q = Pattern.compile(regx);
        Matcher m = q.matcher(inhoud);
        StringBuilder found = new StringBuilder();
        
        while(m.find()){
            found.append(m.group());            
        }       
        return found.toString();
    }


Iemand die mij kan helpen?

Systeem - I'm learning, I learn it from a book :)


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22-11 13:46

Janoz

Moderator Devschuur®

!litemod

Het antwoord is debuggen. En hoewel daar natuurlijk prachtige tools voor zijn kun je in dit geval op een heel simpele manier al wat uitsluiten. Door tussen regel 8 en regel 9 gewoon eens de waarde van regx af te drukken zou het heel goed kunnen zijn dat je zo ziet waarom de waarde uit de database niet werkt, terwijl een hardgecodeerde waarde in de sourcecode wel werkt.

Persoonlijk heb ik een donkerbruin vermoeden dat de waarden die in de database staan iets teveel geescaped zijn. E zit namelijk een verschil in de waarde die een string object heeft en de tekens die je tussen de beide "-s zet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RainerSGF
  • Registratie: Juli 2008
  • Laatst online: 14-11 21:17
Aaaah, maintenant je comprends :).
Inderdaad klopt je donkerbruin vermoeden. Nu ook eens getest met rgx.equals("blablabla") en ik merkte dat het inderdaad niet gelijk was. De les ivm escape characters eens doorgenomen en dat heeft het gedaan.

Samengevat:
mijn '\\' (ingevoerd in database) komt overeen met '\\\\' (als string in java), terwijl ik gewoon '\\' wilde voorstellen als string in java. De overbodige extra '\' uit de mysql-input gehaald en nu werkt het naar behoren.

Systeem - I'm learning, I learn it from a book :)