JSL REGEX字邊界\ b<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,-
JSL是否支持REGEX字邊界 \ b?
我正在嘗試使用PAT MATCH和“\ bword \ b”表達式替換文本中的完整單詞。 出於某種原因,JSL不處理\ b,儘管它確實識別並處理\ W.不幸的是,W對我的任務來說還不夠好,因為它與其引入的其他問題中的單詞條目不匹配。
例:
a =“窗口是:打開”;
p = pat regex(“\ bis \ b”);
拍匹配(a,p,“是”);
我希望它能回歸: a = “窗口是:開放的”;
謝謝!- 沙烏爾
Re:JSL REGEX字邊界\ b啊,非常好。 好多了,謝謝。 JMP10有一個簡化的正則表達式函數,可以全局替換:
正則表達式(“你好”,“[^ AEIOU]”,GLOBALREPLACE“?”);
“?è?? o”的
RegexMatch()需要一個外部循環(前面例子中的while())。 PatMatch()可以使用正則表達式作為模式的一部分,但不使用後引用,除了在patRegex()中; patMatch旨在使用patXXXX函數而不是正則表達式語言來構建模式,並且具有捕獲部分匹配的不同方法。
Re:JSL REGEX字邊界\ b我使用\ W(JMP9接受\ W)簡化了正則表達式:
x =“大而快的狐狸”;
a =正則表達式匹配(x,“(\ W | ^)(非常)(\ W | $)”,“\ 1fairly \ 3”);
打印(X);
我唯一剩下的問題是它只進行一次替換,所以我需要一個循環,直到不再返回匹配。 有沒有像FULLSCAN那樣的標誌,我可以在Regex Match中指定?由於某種原因,我無法讓Pat Match工作。
無論如何,你已經幫助了我很多!
Re:JSL REGEX字邊界\ b正則表達式中的帶括號的表達式形成一個可以通過數字引用的捕獲組;只計算開放的parens,從左到右,得到數字。 捕獲組匹配的文本可以在後面的正則表達式或替換字符串中用作後向引用。 \ 1是第一個捕獲組的後向引用。
regexMatch(x,“([^ a-zA-Z0-9_] | ^)([a-zA-Z0-9 _] {4})([^ a-zA-Z0-9_] | $)”,“ \ 1fairly \ 3“);
有3個開放的parens;實際上不需要中間集(在匹配的單詞周圍),但由於它們在那裡我在替換字符串中使用\ 1和\ 3。 \ 0指整個比賽。 如果嵌套括號組,您仍然只需從左到右計算開放的parens來獲取數字。
我使用{4}重複來做一個例子,它不會在源文本中找到第一個出現的三個和五個字母單詞。 您可能需要一些其他方式來指定單詞。 這是一個一次咀嚼一個詞的例子:
打印(JMP版本());
x =“大而快的狐狸”;
而(1,
結果=正則表達式匹配(x,“([^ a-zA-Z0-9_] | ^)([a-zA-Z0-9 _] +)([^ a-zA-Z0-9_] | $)”,“\ 1 \ 3”);
如果(N項(結果)> = 3,
打印(結果[3]),
打破()
);
);
“9.0.2”
“中的”
“大”
“非常”
“快”
“狐狸”
在此示例中,+表示“前一個表達式中的一個或多個”,因此您可能不需要顯式長度。 RegexMatch返回一個反向引用列表;列表中的第一項是\ 0,表示整個匹配。 結果[3]是\ 2,這是匹配的單詞。 替換是\ 1 \ 3,它切斷了2個字符串。
有許多網站都有正則表達式的教程。 Regular-Expressions.info - Regex教程,示例和參考 - Regexp模式 ,例如。
JMP11的\ b將簡化示例,很多。
Re:JSL REGEX字邊界\ b這非常有用,因為我還在使用JMP9。
我需要根據要匹配的字符串長度動態調整{n}。
你能詳細說明替換的編號是如何工作的嗎?我不確定我明白什麼是\ 1和\ 3?
謝謝!- Shaul
Re:JSL REGEX字邊界\ bJMP10不支持正則表達式中的\ b字邊界。 JMP11會。 在以下示例中,{4}表示前一個字符的4次出現,其旨在通過要求每邊的字邊界來匹配4個字母的單詞“very”。 regexMatch函數將第二個參數解釋為正則表達式,並將第三個參數解釋為替換文本,並在捕獲括號組之後編號(在第二個示例中使用)。
打印(JMPVERSION());
x =“大而快的狐狸”;
regexMatch(x,“\ b \ w {4} \ b”,“公平”);
打印(X);
“11.0.0”
“大而快的狐狸”
根據您的需要,JMP10可以通過捕獲分隔符並將它們插回到替換中來做得很好:
打印(JMPVERSION());
x =“大而快的狐狸”;
regexMatch(x,“([^ a-zA-Z0-9_] | ^)([a-zA-Z0-9 _] {4})([^ a-zA-Z0-9_] | $)”,“ \ 1fairly \ 3“);
打印(X);
“10.0.1”
“大而快的狐狸”
\ b是一個難以編寫的模式,因為它需要在一個單詞之前和之後匹配並且根本不匹配任何文本,並且該單詞可以在最開始(^)或最後($)文本。 第二個示例通過使用替換文本中的\ 1和\ 3括號組來解決“根本不匹配”的要求。