我正在处理类似date()的日期转换功能,需要解析字符串并保留转义字符。
我的意思是通过正则表达式(或更好的方式)将$ str1更改为$ str2:
$str1 = '5852& ^ \a\\b\\\\\c D \\e k.';
$str2 = 'bDek';
$ str2只有[a-zA-Z],不会被反斜杠转义。
此致
答案 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