Получение символов без обратной косой черты - PullRequest
1 голос
/ 14 января 2012

Я работаю над функцией преобразования даты, такой как date (), и мне нужно проанализировать строку и оставить экранированные символы.

Я имею в виду изменение $ str1 на $ str2 с помощью регулярного выражения (или любым другим способом):

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

$ str2 имеет только [a-zA-Z], которые не экранируются обратной косой чертой.

С уважением,

1 Ответ

0 голосов
/ 14 января 2012

Это может решить, что для вас:

(?:^|[^\\](?:\\\\)*)([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
...