2017-07-21 49 views
-1

我需要一個正則表達式,將做如下改造:正則表達式所以反斜線意味着「刪除下一個字符」

Input: ab\xy 
Output: aby 


Input: ab\\xy 
Output: ab\xy 

考慮所有的反斜線爲文字反斜槓。也就是說,第一個輸入是字符序列['a', 'b', '\', 'x', 'y'],第二個輸入是['a', 'b', '\', '\', 'x', 'y']

該規則是「在字符串中,如果遇到反斜槓,請將其刪除,然後刪除它,除非下列字符是反斜槓,否則只刪除兩個反斜槓中的一個。

這是轉義序列地獄,我似乎無法找到我的出路。

+1

你可以添加你的編程語言? –

+0

那麼'ab \\\ xy'呢?它應該導致'ab \ xy'?或'ab \ y'? –

+0

這就是'ab \ y' - 第一個'\\'變成'\',下面的'\ x'消失。它應該是一個PCRE。 – dmd

回答

1

您可以使用

(?s)\\(\\)|\\. 

$1替換恢復\當一個雙反斜線被發現。

詳細

  • (?s) - 一個DOTALL修飾符,這樣.可以匹配任何字符計有換行字符
    • \\(\\) - 一個反斜槓相匹配,然後匹配並捕獲另一個反斜槓組1
  • | - 或
  • \\. - 匹配任何轉義序列(反斜槓+任何字符)。

regex demoPHP demo

$re = '/\\\\(\\\\)|\\\\./s'; 
$str = 'ab\\xy ab\\\\xy ab\\\\\\xy'; 
echo $result = preg_replace($re, '$1', $str); 
// => aby ab\xy ab\y 
相關問題