ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
3171
3171
EMPFEHLEN
-
Hallo ich habe mir kürzlich und nach langem hin und her mit dem Builder von boost die regex library zu installieren (am ende doch via mak file)
Nun jetzt muss ich erst einmal zugeben, dass mein teschnisches (IT) Englisch mittelmäßig bis schlecht ist und ich in der Boost Dokumentation nicht weiter komme (ein Grund weshalb ich denke, dass Tutorials.de die richtige Anlaufstelle für Hilfe ist
)
Ich habe ein Programm mit dem BCB6.0 geschrieben und führe dort mittels dieser Zeilen:
Code :1 2 3 4
strE = strListOrte->Strings[0].c_str(); s = dinohsname.c_str(); static const boost::regex e(strE); bMatch = regex_search(s, e);
einen vergleich durch. Ziel ist es dass hier ein Match bei z.B.
e = recklingh[a-z].*
und
s = rechlinghsn orthlostr
erzielt wird. Leider funktioniert das in dieser Version nicht. Im ersten Anlauf matchen Strings wie
abcd[a-z].* und abcd efg
kommt dann aber
abc[a-z].* und abcd efg - was kein match ergibt, dann match das Programm im weiteren verlauf selbst abcd[a-z].* und abcd efg nicht mehr... Man hat mir bis jetzt ohne weitere Hinweise angedeutet, dass ich noch einen Parameter/Argument einsetzen muss um festzulegen WIE gematch werden soll. Die Liste in der Doku verstehe ich allerdings nicht :/ kann mir bei der ganzen Sache hier jemand weiterhelfen?
Vielen Dank im VorausGeändert von Oklino (14.03.06 um 10:37 Uhr)
-
15.03.06 10:49 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
"abcd efg" kann nicht vom reg. Ausdruck "abcd[a-z].*" akzeptiert werden - das Leerzeichen ist nicht Teil der Zeichenklasse [a-z]. Im zweiten Fall sollte allerdings sollte der Ausdruck mit dem Suchstring übereinstimmen.
Zitat von Oklino
Also bei mir funktioniert's auch ohne spezielle Flags:GrußCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#include <iostream> #include <string> #include <boost/regex.hpp> using namespace std; int main() { boost::regex expr ("abcd[a-z].*"); string line; while (getline(cin, line)) { if (boost::regex_search(line, expr)) { cout << "line matches." << endl; } else { cout << "line does *not* match." << endl; } } }If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
ups ich habe gerade gesehen, dass ich oben die Version mit regex_search() gepostet habe...
naja... aber damit sollte es dann funktionieren, wenn ich den regulären Ausdruck anpasse?
es sollte dann doch mit
exp = abc[a-z| |0-9]*
strE = abcd efg 123
klappen, oder?
achja nochwas... der RegexCoach meinte dass [a-z].* nen match macht, ich denke mal weil "." für "beliebiges Zeichen"(auch leerzeichen) steht und ".*" wäre dann ja "beliebiges zeichen, beliebig(es Zeichen beliebig) oft" oder so ähnlich.Geändert von Oklino (16.03.06 um 12:14 Uhr)
-
16.03.06 12:37 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Ja.
Zitat von Oklino
Ja. (Der senkrechte Strich ist allerdings doppelt)
Zitat von Oklino
Ja.
Zitat von Oklino
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
OR bei reg. Audr. = || ?
[a-z|| ||0-9]*
?
-
16.03.06 13:13 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Zitat von Oklino
Vielleicht hättest du mal sagen sollen was du mit dem Ausdruck meinst.
Die eckigen Klammern sind eine Zeichenklasse, d.h. an Stelle dieser Klasse kann ein Zeichen von innerhalb der Klammern stehen. Spezialzeichen verlieren innerhalb einer Zeichenklasse ihre Bedeutung. D.h. ein | ist ein ganz normales Zeichen - und wenn du es 10-mal innerhalb der Klammern schreibst, wird es doch nur max. 1-mal mit einem Zeichen im Suchstring übereinstimmen.
Was dein Ausdruck bedeutet ist folgendes: Zuerst muß ein Zeichen aus dem Bereich a bis z oder ein | Zeichen oder ein | Zeichen oder ein Leerzeichen oder ein | Zeichen oder ein | Zeichen oder ein Zeichen im Bereich 0 bis 9 sein. Das dann beliebig oft (auch überhaupt nicht!).
Ich nehme mal an du willst Buchstaben, Leerzeichen und Ziffern akzeptieren: [a-z 0-9]*
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
ja genau
danke.
ich hab das soweit korrigiert, aber beim debuggen matcht er
recklingh[a-z 0-9]*
immernoch nicht mit
recklinhsn orthlostr nr 190
vielleicht mache ich ja was anderes falsch. ich poste mal nen paar Zeilen, die vielleicht wichtig/fehlerhaft sein könnten...
bau des pattern:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
case 5: strE = strListOrte->Strings[0].c_str(); if(strListOrte->Count == 1) strE += "[a-z 0-9]*"; else strE += "[a-z 0-9]* "; for(i = 1; i < (strListOrte->Count); i++) { strE += strListOrte->Strings[i].c_str(); strE += "[a-z 0-9]* "; if(i == (strListOrte->Count-1)) strE += "[a-z 0-9]*"; } break; default: bMatch = false; }//endofswitch
dann das Matchen...
Code :1 2 3
static const boost::regex e(strE); bMatch = boost::regex_match(s, e); if(bMatch == 0)
zwischendruch wird der Ort noch von mir gekürzt:
danach wird dann wieder das obige Konstrukt wiederholtCode :1 2 3 4 5 6 7
nVarCounter = strListOrte->Strings[0].Length(); // wie lang ist der Ortname? if(nVarCounter > 1) { strListOrte->Strings[0] = strListOrte->Strings[0].SetLength((nVarCounter-1)); nVarCounter2 = strListOrte->Count; (...)
-
16.03.06 16:01 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Ist das nur 'n Tippfehler das da kein g drin ist? (warum kopierst du nicht und fügst ein?)
Zitat von Oklino
Du weißt aber schon was static bedeutet?
Zitat von Oklino
Hast du dir den reg. Ausdruck und den String mal ausgeben lassen?GrußCode :1
cerr << e.str()
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
zu 1: war nen Tippfehler. Die Ausdrücke werden ja ~dynamisch~ erzeugt. deswegen hab ich nicht kopiert.
Zitat von deepthroat
zu 2: jetzt ja... *ouch*
zu 3. die inhalte sind wie oben (mit dem Tippfehler das
) (wobei ich mir nur strE habe ausgeben lassen - was wohl der fehler war)
-----------------------------------------------------------------------------------------------
nach dem Entfernen von static const...:
ich fasse es nicht !! der geht
*löl* danke *knutsch* es geht
(etliche Stunden saß ich davor... DANKE
)
-
16.03.06 16:33 #10
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hihi. Nix zu danken, dafür bin ich ja da
Zitat von Oklino
Aber setz doch noch schnell das Thema auf erledigt.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Boost Regex
Von Jacal im Forum C/C++Antworten: 2Letzter Beitrag: 27.08.10, 14:04 -
Boost Regex c++ Bitte um Hilfe bei einer Abfrage
Von Anne83 im Forum C/C++Antworten: 4Letzter Beitrag: 16.01.10, 12:50 -
Hile bei Library Boost(regex)
Von pamax im Forum C/C++Antworten: 2Letzter Beitrag: 03.08.07, 12:11 -
Fehler mit log4j, wie initialisieren, welche parameter?
Von eddy85 im Forum JavaAntworten: 1Letzter Beitrag: 08.03.07, 16:45 -
[AE] Speed Boost
Von haebel im Forum Videoschnitt, Videotechnik & -produktionAntworten: 4Letzter Beitrag: 04.08.03, 09:35





Zitieren
Login






