date()のような日付変換関数を使用しています。文字列を解析してエスケープされた文字を残す必要があります。バックスラッシュをエスケープしない文字を取得する
私は正規表現(または任意のより良い方法)により$のSTR2への$ STR1を変える意味:
$str1 = '5852&^\a\\b\\\\\c D \\e k.';
$str2 = 'bDek';
の$ STR2は、バックスラッシュでエスケープされていないだけ[-ZA-Z]を持っています。
よろしく、
date()のような日付変換関数を使用しています。文字列を解析してエスケープされた文字を残す必要があります。バックスラッシュをエスケープしない文字を取得する
私は正規表現(または任意のより良い方法)により$のSTR2への$ STR1を変える意味:
$str1 = '5852&^\a\\b\\\\\c D \\e k.';
$str2 = 'bDek';
の$ STR2は、バックスラッシュでエスケープされていないだけ[-ZA-Z]を持っています。
よろしく、
これはあなたのためにそれを解決することがあります。
(?:^|[^\\](?:\\\\)*)([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
@fgeはないperlででPHPの男!私もJavaScriptでそれを手に入れました! – noob
@micha私が出す正規表現は、PCRE(したがってPHP)_and_ECMA 262(JavaScript)と互換性があります。 – fge
@fgeあなたはそれをどのようにテストしたのですか? – noob