2012-01-14 104 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