[gelöst]Kleines Problem zu RegExp

Alles rund um die Programmierung mit Qt
Antworten
tamasi
Beiträge: 45
Registriert: 5. Juli 2007 15:49

[gelöst]Kleines Problem zu RegExp

Beitrag von tamasi »

Ich habe eine größere Anzahl an Checkbox, die alle mit cb_A_xy beginnen, wobei xy eine natürliche Zahl ist.

Jetzt möchste ich teile deser Boxen sperren. Dazu will ich die nötigen per findChildren ausfindig machen. D.h. xy ist quasi ein Intervall in dem ich sperren möchte, zb, alle Boxen cb_A_10 bis cb_A_20.

Ich habe mich bisher noch nie mit diesen RegExp auseinenandergesetzt, aber alle meine Versuche mittels den Qt Beispielen scheiterten.

Versuchte bereits sowas hier:

[cb_A_]+[10-20] oder cb_A_{1,1}+[10-20]{1,1}, wobei {1,1} eig obsolete sein sollte und ähnliche Varianten, inkl Wortgrenzen mit \b...\b
Irgendwie will das nit so recht klappen:(.

Muss auch zugeben habe jetzt nicht unbedingt viel Zeit mich da stundelang durch irgendwelche i-net Tutorials zu kämpfen.

Wenn wer die Lösung kennt würde ich mich sehr drüber freuen.

lg

EDIT:

Habe doch noch etwas Probiert und Foren gelesen. Das Problem trat bei den 2-stelligen Zahlen auf. Da kann man nicht einfach [10-20] schreiben. Zumindest kommt mir das so vor.

Anbei meine Lösung. Ob sie jetzt perfekt ist, oder es alles in einem geht, keine Ahnung, auf jeden Fall funktioniert sie:)

Code: Alles auswählen

  if (Bit_<10) {
    s0="^cb_A_["+QString::number(Bit_)+"-9]$|cb_A_[1-3][0-9]$";
  }
  else if (Bit_<20 && Bit_>9) {
    s0="^cb_A_[1]["+QString::number(Bit_-10)+"-9]$|cb_A_[2-3][0-9]$";
  }
  else if (Bit_>19 && Bit_<30) {
    s0="^cb_A_[2]["+QString::number(Bit_-20)+"-9]$|cb_A_[3][0-9]$";
  }
  else if (Bit_>29) {
    s0="^cb_A_[3]["+QString::number(Bit_-30)+"-1]$|cb_A_[3]["+QString::number(Bit_-29)+"-9]$";
  }
(QString s0)
Ich sperre immer von x-31. Ist auch die obere Grenze variabel, muss dort eben auch Unterschieden werden, ähnlich wie bei der Unteren.

Hoffe kann damit auch Anderen helfen, die ein ähnliches Problem haben.
Zuletzt geändert von tamasi am 1. April 2008 11:25, insgesamt 2-mal geändert.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Du solltest dir lieber ein RegExp Tutorial durchlesen bevor du damit hantieren möchtest. Die RegExp Erklärung in der Dokumentation ist nicht sehr gut.. Und wild rumprobieren wird dir da nichts bringen.

Wenn du absolut kein Interesse an RegExp hast (kann wirklich nützlich sein!) und es nur dieses eine mal brauchst:
^cb_A_[0-9]{1,2}$ sollte gehen. Wenn es immer 2 Zahlen sind kannst du das {1,2} durch {2} ersetzen.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

RegEx können nur für Zeichenvergleiche benutzt werden, bitte lies dir ein passendes Tutorial dazu mal durch.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Re: [gelöst]Kleines Problem zu RegExp

Beitrag von PeterLustig »

tamasi hat geschrieben:Habe doch noch etwas Probiert und Foren gelesen. Das Problem trat bei den 2-stelligen Zahlen auf. Da kann man nicht einfach [10-20] schreiben. Zumindest kommt mir das so vor.
Das ist kein Problem. Wie gesagt, wenn du RegExp benutzen willst, dann lese auch erst ein Tutorial dazu. [10-20] wäre entweder eine 1, eine 0, oder eine Zahl zwischen 1 und 2, aber keineswegs eine Zahl zwischen 10 und 20.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Zahlen zwischen 10 und 20: (1[0-9]|20)
Antworten