我在使用 MatLab 的 linux 和 windows 上遇到了regexp()的不同行為。我正在嘗試根據分隔符分隔字串。這是一個最小的例子:
Linux
test_string = '<some_path>/tool/test/unit_test'
seperator = sprintf('%stest%s',filesep,filesep)
regexp(test_string, seperator,'split')
輸出:
1×2 cell array
{'<some_path>/tool'} {'unit_test'}
視窗
test_string = '<some_path>\tool\test\unit_test'
seperator = sprintf('%stest%s',filesep,filesep)
regexp(test_string, seperator,'split')
輸出
1×1 cell array
{'<some_path>\src\tool\test\unit_test'}
這個代碼片段在 Linux 上的輸出代表了我想要的行為。誰能解釋或指出資源以了解發生了什么?
uj5u.com熱心網友回復:
/
Linux ( ) 和 Windows ( )中的路徑分隔符不同\
。
該\
字符是一個特殊的正則運算式元字符,它用于形成“正則運算式轉義”,例如\d
匹配數字等。要匹配文字反斜杠,它必須加倍,或者轉義。
要轉義任何特殊的正則運算式元字符,您可以使用regexptranslate(op, str)
with op
set to escape
:
seperator = sprintf('%stest%s',regexptranslate('escape',filesep), regexptranslate('escape',filesep))
其他op
可能的值是:
翻譯型別 | 描述 |
---|---|
'escape' |
翻譯 str 中的所有特殊字符,例如'$' , '.' , '?' , , 以便在,和'[' 中使用時將它們視為文字字符。翻譯會在 中的每個特殊字符之前插入一個反斜杠或轉義字符.regexp regexpi regexprep '\' str |
'wildcard' |
翻譯所有通配符和'.' 字符,以便在、和str 中使用時將它們視為文字通配符和句點。翻譯替換了with的所有實體、with的所有實體和with的所有實體。regexp regexpi regexprep '*' '.*' '?' '.' '.' '\.' |
'flexible' |
str 用匹配文本的正則運算式替換文本。如果您指定'flexible' ,則還要指定一個正則運算式以用作替換:newStr = regexptranslate('flexible',str,expression) 。運算式輸入可以是字符向量或字串標量。此語法等效于 newStr = regexprep(str,expression,regexptranslate('escape',expression)) . |
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496153.html
下一篇:返回列表