0
我在C++代碼中使用Tcl_StringCaseMatch
函數進行字符串模式匹配。一切正常,直到輸入模式或字符串有[]
括號。例如,如:在Tcl_StringCaseMatch中轉義方括號
str1 = pq[0] pattern = pq[*]
Tcl_StringCaseMatch
不起作用,即返回上述輸入的錯誤。 如何避免[]
模式匹配?
我在C++代碼中使用Tcl_StringCaseMatch
函數進行字符串模式匹配。一切正常,直到輸入模式或字符串有[]
括號。例如,如:在Tcl_StringCaseMatch中轉義方括號
str1 = pq[0] pattern = pq[*]
Tcl_StringCaseMatch
不起作用,即返回上述輸入的錯誤。 如何避免[]
模式匹配?
問題是[]
是模式匹配中的特殊字符。你需要用一個反斜槓逃脫他們讓他們像普通的字符處理
pattern= "pq\\[*\\]"
我不認爲這應該不會影響字符串爲好。雙斜槓的原因是你想把反斜槓本身傳遞給TCL引擎。
對於普通讀者:
[]
在TCL有特殊含義在一般情況下,超過匹配他們在這裏採取的角色模式 - 「運行命令」(如`在shell中`或$()
),但[number]
將有沒有效果,並且括號被正常處理 - 因此字符串str1
不需要在這裏轉義。
對於額外的困惑:
TCL將解釋]
沒有前面[
作爲默認爲普通字符。我覺得這太混亂了,寧願TCL抱怨不平衡的括號。正如OP提到的,這允許你放棄最後的兩個反斜槓並使用"pq\\[*]"
。我不喜歡這一點,而是明確表示兩者都是正常對待,而不是通常的TCL方式,但是對於每個人來說都是自己的。
需要逃脫兩個支架或只是打開一個? –
@AvinashKumar如果TCL在沒有前綴'['的情況下看到一個']',它就認爲它是一個常規字符,這就是它工作的原因。我寧願拋出一個錯誤。我認爲它很混亂,所以我沒有把它添加到解決方案中,但正如你所說 - 它的工作原理。 – kabanus
@AvinashKumar你改變了你的評論內聯。你之前的一個更好 - 你只能逃脫第一個,但看到我的編輯。 – kabanus