得到反斜杠 - 未转义的字符

时间:2012-01-14 10:24:15

标签: php regex string filter backslash

我正在处理类似date()的日期转换功能,需要解析字符串并保留转义字符。

我的意思是通过正则表达式(或更好的方式)将$ str1更改为$ str2:

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

$ str2只有[a-zA-Z],不会被反斜杠转义。

此致

1 个答案:

答案 0 :(得分: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