Автор Тема: QRegExp (sed) помощ  (Прочетена 912 пъти)

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
QRegExp (sed) помощ
« -: Aug 27, 2010, 01:13 »
Добър вечер (то е нощ де, но както и да е).

Та на проблема:

Имам следния стринг:
ala-bala

обаче искам през QRegExp да го направя така:
<b> ala-bala </b>

Обаче проблемът е че нещо не мога да налучкам правилният отговор. Смятам че трябва да е нещо от този род:

Код
GeSHi (C++):
  1. QString resul1 =  result2.replace(QRegExp("\[b][0-9][A-Z][a-z]\[/b]"), "<b>\\1</b>");

Обаче както споменах - близко съм (или така предполагам), но нещо не ми се получава. Та ако можете - ударете едно рамо!  :)

Благодаря предварително!
« Последна редакция: Aug 27, 2010, 18:08 от LinuxFanUNIX »
Активен

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
Re: QRegExp (sed) помощ
« Отговор #1 -: Aug 27, 2010, 09:22 »
Не съм много силен в регулярните изрази, но си мисля, че това ще ти свърши работа

Код
GeSHi (C++):
  1. QString resul1 =  result2.replace(QRegExp("\[b\]([^\[]*)\[/b\]"), "<b>\\1</b>");
Активен

remotex

  • Напреднали
  • *****
  • Публикации: 344
    • Профил
Re: QRegExp (sed) помощ
« Отговор #2 -: Aug 27, 2010, 09:27 »
Забравил си да го оградиш със скоби (това което ще заместваш) напр.:
Код
GeSHi (C++):
  1. QString result2 =  "xyzala-balaxyz";
  2. QString resul1 =  result2.replace(QRegExp("([abl-]+)"), "<b>\\1</b>");
  3. // result1 == "xyz<b>ala-bala</b>xyz"
  4.  
Активен

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Re: QRegExp (sed) помощ
« Отговор #3 -: Aug 27, 2010, 09:44 »
Не съм много силен в регулярните изрази, но си мисля, че това ще ти свърши работа

Код
GeSHi (C++):
  1. QString resul1 =  result2.replace(QRegExp("\[b\]([^\[]*)\[/b\]"), "<b>\\1</b>");
В този случай не се получава - връща това
При текст: abc
след замяната става:
[<b>]a</b>c[/b]

Пак не се получава.  :(
Активен

remotex

  • Напреднали
  • *****
  • Публикации: 344
    • Профил
Re: QRegExp (sed) помощ
« Отговор #4 -: Aug 27, 2010, 10:03 »
Не съм много силен в регулярните изрази, но си мисля, че това ще ти свърши работа

Код
GeSHi (C++):
  1. QString resul1 =  result2.replace(QRegExp("\[b\]([^\[]*)\[/b\]"), "<b>\\1</b>");

Note: The C++ compiler transforms backslashes in strings. To include a \ in a regexp, enter it twice, i.e. \\. To match the backslash character itself, enter it four times, i.e. \\\\.

Понеже горното дава предупреждение:
Код
GeSHi (C++):
  1. main.cpp:20: warning: unknown escape sequence '\]'
  2. main.cpp:20: warning: unknown escape sequence '\]'
  3.  

По-интересното е защо въпреки това работи: дай по-конкретен пример...
Не си дал такъв пример, но ...
Ако искаш да заместиш (интервалите са за да избегна форматирането) напр. [ b ]ala-bala[ /b ] да стане <b>ala-bala</b> тогава задължително погледни секцията за намиране минимално съвпадение (за/ради вложените етикети) и особено забележката в края, че веднъж си имах проблеми (исках да го направя само с израза и не стана) затова само със (забележи че примера даже не е с вложени а просто с 2 групи по-наблизо):
void QRegExp::setMinimal ( bool minimal )

Enables or disables minimal matching. If minimal is false, matching is greedy (maximal) which is the default.

For example, suppose we have the input string "We must be <b>bold</b>, very <b>bold</b>!" and the pattern <b>.*</b>. With the default greedy (maximal) matching, the match is "We must be <b>bold</b>, very <b>bold</b>!". But with minimal (non-greedy) matching, the first match is: "We must be <b>bold</b>, very <b>bold</b>!" and the second match is "We must be <b>bold</b>, very <b>bold</b>!". In practice we might use the pattern <b>[^<]*</b> instead, although this will still fail for nested tags.
Активен

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
Re: QRegExp (sed) помощ
« Отговор #5 -: Aug 27, 2010, 10:46 »
@remotex: Вярно, забравил съм, че трябва да escape-на наклонените черти и да станат двойни.
Активен

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Re: QRegExp (sed) помощ
« Отговор #6 -: Aug 27, 2010, 18:08 »
Благодаря на всички ви! Стана! Ето по този начин:

Код
GeSHi (C++):
  1. QString resul1 = result2.replace(QRegExp("\\[b\\]([^\\[]*)\\[/b\\]"), "<b>\\1</b>");

Още веднъж ви благодаря! Живи и здрави да сте!  [_]3 [_]3 [_]3
Активен