2012-01-14 67 views
1

我正在使用日期轉換函數(如date()),並且需要解析字符串並留下轉義字符。獲取反斜線未轉義字符

我的意思是改變$ STR1通過正則表達式(或任何更好的方法)$ STR2:

$str1 = '5852&^\a\\b\\\\\c D \\e k.'; 
$str2 = 'bDek'; 

$ STR2只[A-ZA-Z]未用反斜槓轉義。

問候,

+0

@fge不是在Perl PHP的人!我也用JavaScript獲得了它! – noob 2012-01-15 01:05:42

+0

@micha我推出的正則表達式與PCRE(因此PHP)_and_ ECMA 262(因此JavaScript)兼容... – fge 2012-01-15 01:13:43

+0

@fge你怎麼知道你測試過它? – noob 2012-01-15 01:27:49

回答

0

這可以解決你:

(?:^|[^\\](?:\\\\)*)([a-zA-Z])\b 

Perl的演示:

$ perl -ne 'print "-->$_<--\n" foreach m/(?:^|[^\\](?:\\\\)*)([a-zA-Z])\b/g' 
5852&^\a\\b\\\\\c D \\e k.                    
-->b<-- 
-->D<-- 
-->e<-- 
-->k<-- 
o\a\\b\\\c\\\\d 
-->o<-- 
-->b<-- 
-->d<-- 

正則表達式如下:

(?:    # begin non capturing group 
^    # the beginning of input, 
    |    # or 
    [^\\]   # a character which is not a backslash, followed by 
    (?:\\\\)*  # two backslashes, zero or more times 
)     # end non capturing group, followed by 
([a-zA-Z])  # a letter, captured, followed by 
\b    # a word break 
+0

謝謝@fge。我如何在PHP中使用它? ''/(?:^ | [^ \\](?:\\\\)*)([a-zA-Z])\ b /「'作爲preg_replace()模式不起作用! – AHHP 2012-01-14 19:42:34

+0

我想你最好的選擇是使用'preg_match_all'代替,並將結果收集到一個數組中。然後是通過將數組元素連接成一個字符串來構建結果字符串的問題......我確信PHP在商店中有類似的東西(注意:我不知道PHP保存與正則表達式相關的函數) – fge 2012-01-14 21:22:34