Не съм много силен в регулярните изрази, но си мисля, че това ще ти свърши работа
GeSHi (C++):
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++):
main.cpp:20: warning: unknown escape sequence '\]'
main.cpp:20: warning: unknown escape sequence '\]'
По-интересното е защо въпреки това работи: дай по-конкретен пример...
Не си дал такъв пример, но ...
Ако искаш да заместиш
(интервалите са за да избегна форматирането) напр. [ 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.