理想情況下,我希望不必求助于捕獲組,而是斷言字串以某個序列開始/結束并直接使用正則運算式匹配的值。
輸入:
map_Ks ./CarbonFiber_T.tga
輸入定義:
- 行首
- 也許一些空間
- 字串
map_Ks(這是我要為其賦值的類欄位) - 一個或多個空格
- 一個有效的檔案路徑,除了 0x00-0x1F、0x7C 之外的任何東西(這是我想分配給該欄位的值)
- 也許一些空間
- 行結束
嘗試 1:它有效,但結果在一個被捕獲的組中
(?:^\s map_K.\s )([^\x00-\x1F\x7C] )$
map_Ks ./CarbonFiber_T.tga
./CarbonFiber_T.tga
嘗試 2:它有效,沒有組,但匹配是整行(理想用法)
(?=^\s map_K.\s )[^\x00-\x1F\x7C] $
map_Ks ./CarbonFiber_T.tga
題:
這是可能的,還是我對正則運算式引擎的要求太多而只是應該使用捕獲組?
uj5u.com熱心網友回復:
您需要用lookbehind 替換lookahead,并要求消耗模式的第一個字符是非空白字符。
您可以使用
(?<=^\s map_K.\s )(?=\S)[^\x00-\x1F\x7C]*(?<=\S)(?=\s*$)
(?<=^\s map_K.\s )[^\x00-\x1F\x7C\s](?:[^\x00-\x1F\x7C]*[^\x00-\x1F\x7C\s])?(?=\s*$)
請參閱正則運算式演示(或此正則運算式演示)。詳情:
(?<=^\s map_K.\s )- 與緊跟在字串開頭、一個或多個空格、map_K、除 LF 字符以外的任何一個字符、一個或多個空格之前的位置匹配的正向后視(?=\S)- 一個正向前瞻,要求下一個字符是非空白字符[^\x00-\x1F\x7C]- 一個或多個 ASCII 控制字符以外的字符(?<=\S)- 前一個字符必須是非空白字符(?=\s*$)- 一個正向前瞻,要求緊鄰右側的字串末尾有零個或多個空格。
該[^\x00-\x1F\x7C\s](?:[^\x00-\x1F\x7C]*[^\x00-\x1F\x7C\s])?正則運算式的一部分一個字符不是一個空白,而不是一個ASCII控制炭,然后比ASCII控制字符以外的任何零個或多個字符的可選序列,然后一個單個字符不是一個空白,而不是一個ASCII控制字符相匹配。
以防萬一您要調整檔案路徑正則運算式部分,請參閱Windows 和Linux 目錄名稱中禁止使用哪些字符?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363146.html
