1
我需要嵌入用戶輸入我的正則表達式,所以它需要爲任何正則表達式特殊字符轉義,我不知道什麼字符串將是。轉義正則表達式特殊字符爲tr1 ::正則表達式
它會像
string pattern = "\\d+ " + myEscapeFunction(userData);
我需要哪個特殊字符逃跑?或者是否有與Qt的QRegExp::escape等效的功能?
我需要嵌入用戶輸入我的正則表達式,所以它需要爲任何正則表達式特殊字符轉義,我不知道什麼字符串將是。轉義正則表達式特殊字符爲tr1 ::正則表達式
它會像
string pattern = "\\d+ " + myEscapeFunction(userData);
我需要哪個特殊字符逃跑?或者是否有與Qt的QRegExp::escape等效的功能?
您必須轉義的字符列表取決於您正在使用的各種正則表達式語法中的哪一種。如果您使用的是默認ECMAScript
,則看起來好像QRegExp::escape
文檔中的列表是一個很好的開始。它說:
特殊字符是$,(,),*,+,。,?,[,]],^,{,|,和}。
該列表由於某種原因遺漏了\
。
但比它稍微複雜一些,因爲在方括號內,除\
和]
之外的字符都不是特殊字符,並且\]
必須保持未轉義狀態。
此外,在(
之後出現的?
並不特別。例如,在(?=x)
中?
應該而不是被轉義。
我認爲這是相當多的,但我沒有把足夠的時間放在這個確定的。
我不確定,如果有一個通用的解決方案,因爲它取決於表達標準。例如(AFAIR)需要一些引擎]可以逃脫,有些則不需要。你應該看看你的標準逃逸字符串的規則,並做一些字符串替換...... – Spook 2013-03-20 12:37:27
這似乎是這種情況。現在我想到了,tr1 :: regex允許在運行時設置表達式標準。我認爲它默認爲ECMAscript。 – sashoalm 2013-03-20 12:39:59