正則表達式轉義字符問題我遇到了正則表達式和括號字符的問題。
這個 JSL 片段:
Show(Regex("abcdef[ghi]", "([^\[]*)\[([^\]]*)\]", "\1{\2}"))在 JMP (14.1) 中不起作用。 它給出以下錯誤:
Unexpected "([^]*)\[([^\]]*)\]", "\1{\2}"))". Perhaps there is a missing "," or ")".
Trying to parse arguments of function "Regex".然而,這在我的 Perl 正則表達式測試器中是有效的正則表達式。 (我在 OS X 上使用模式。) 在該環境下,輸入:
abcdef[ghi]
到正則表達式
([^\[]*)\[([^\]]*)\]
使用重置值
$1{$2}產生結果
abcdef{ghi}(Perl 表達式是
$searchText =~ s/([^\[]*)\[([^\]]*)\]/$1{$2}/gism;)。
到底是怎麼回事? JMP 正則表達式引擎是否需要其他方法來轉義括號字符?
謝謝。
回复:正則表達式轉義字符問題它也不起作用:
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]\!007B([^\]]*)\]", "[{\1]");
回复:正則表達式轉義字符問題我犯了一個錯誤。編寫這樣的代碼不會得到正確的結果。
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]\([^\]]*)\]", "[\1]");
回复:正則表達式轉義字符問題如何處理這種組合:保留的範圍是從“:[{”開始、到結束“]”。
{:[[ghi]]:[{op},{q}]}abcdef需要獲取:
[{op},{q}]
回复:正則表達式轉義字符問題作為後續,我學到了一些關於 Perl 正則表達式我不知道的東西,那就是引擎足夠聰明,知道“[^[]”意味著“除了“[”之外的所有內容”。 也就是說,引擎足夠聰明,不會在這個特定上下文中堅持在第二個“[”之前使用反斜杠。 它還知道如何正確解釋“[^abc[]”。
JMP 中的引擎似乎也理解這一點。
所以我通過逃避“[”給自己製造了比我需要的更多的麻煩。
回复:正則表達式轉義字符問題啊哈! 謝謝 pmroz 和馬克。 經過一番擺弄,我弄清楚瞭如何做我想做的事。
1. 為了 JSL 解釋器的利益,首先使用 \[...]\ 轉義整個正則表達式字符串。
2. 然後,為了 Regex 引擎的利益,請像在 Perl 中一樣轉義括號字符。
結果是:
Show(Regex("abcdef[ghi]", "\[([^\[]*)\[([^\]]*)\]]\", "\1{\2}"));這會產生預期的結果;
abcdef{ghi}分解字符串我們有:
1. \[ 對於 JSL
2. [([^\[]*)\[([^\]]*)\] 用於正則表達式引擎(就像 Perl 中一樣)
3.]\ 對於 JSL
唷!!!
回复:正則表達式轉義字符問題反斜杠字符用於轉義下一個字符,一般來說,就像 Perl 風格一樣,但它也表示特殊字符集,例如\s對於空格字符或\d對於數字。 如果你想進入你就不會成功s通過輸入\s在正則表達式中。 轉義序列\[很特別,並且與結束語配對]\順序。 也就是說,這不是包含字面量的方式]特點。 相反,它將包含直到結束轉義序列的字符串。
請參閱分解形式的示例(四個捕獲組),該示例說明了它們的工作原理:
Regex(
"abcdef[ghi]",
"([^\[\[]\]*)" || "(\[\[]\)" || "([^\[\[]\]*)" || "(\[\]]\)",
"\1-\2-\3-\4"
);
回复:正則表達式轉義字符問題@pmroz是正確的。 早在添加正則表達式支持之前,JMP 就做出了一個不幸的選擇,允許字符串中任意位置的 \[ ... ]\ 表示忽略其間的所有特殊字符含義。 要獲取文字文本 \[ 需要使用 JMP 的其他轉義機制 \!X,將 X 替換為 \ ,以表示在 JMP 解析 JSL 時不與 [ 結合的 \。 稍後,當正則表達式解析模式時,\ 後面跟著 [,這又告訴正則表達式忽略 [ 的特殊含義並將其視為簡單字符。
我正在考慮如何讓這件事變得更容易,感謝您的報告!
回复:正則表達式轉義字符問題有趣的想法。 在 Perl 中 \ 僅轉義下一個字符。
但如果這在 JMP 中不同,那麼這應該有效:
Show(Regex("abcdef[ghi]", "([^\[\]*)\[\([^\]\].*)\]\", "\1{\2}"))
不幸的是,它沒有:
正則表達式:期望 ')' 位於模式 '([^\]*)\[\([^\].*)\]\' 中的位置 21。在訪問或評估 'Regex' 時,Regex/*###*/("abcdef[ghi]", "([^\]*)\!\[\([^\].*)\]\", "\1{\2}")
回复:正則表達式轉義字符問題這將做你想做的事。必須轉義兩個轉義序列!
Show(Regex("abcdef[ghi]", "([^\[\[]\]*)\[\[]\([^\]]*)\]", "\1{\2}"));
Regex("abcdef[ghi]", "([^\!\[]*)\!\[([^\]]*)\]", "\1{\2}") = "abcdef{ghi}";回复:正則表達式轉義字符問題我想知道是否是因為你的字符串中有字符串轉義字符序列“\[”。該序列意味著將之後的所有內容都視為字符串,直到您點擊“]\”。
“([^ \[ ]*) \[ ([^\]]*) \] ”
回复:正則表達式轉義字符問題聚苯乙烯 奇怪的是,這在 JMP 中運行良好:
Show(Regex("abcdef(ghi)", "([^(]*)\(([^\)]*)\)", "\1[\2]"))產生正確的結果:
Regex("abcdef(ghi)", "([^(]*)\(([^\)]*)\)", "\1[\2]") = "abcdef[ghi]";回复:正則表達式轉義字符問題