2012-01-14 18 views
1

date()のような日付変換関数を使用しています。文字列を解析してエスケープされた文字を残す必要があります。バックスラッシュをエスケープしない文字を取得する

私は正規表現(または任意のより良い方法)により$のSTR2への$ STR1を変える意味:

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

の$ STR2は、バックスラッシュでエスケープされていないだけ[-ZA-Z]を持っています。

よろしく、

+0

@fgeはないperlででPHPの男!私もJavaScriptでそれを手に入れました! – noob

+0

@micha私が出す正規表現は、PCRE(したがってPHP)_and_ECMA 262(JavaScript)と互換性があります。 – fge

+0

@fgeあなたはそれをどのようにテストしたのですか? – noob

答えて

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

どのように私はそれをPHPで使用できますか? preg_replace()パターンが機能しないため、 '/(?:^ | [^ \\](?:\\\\)*)([a-zA-Z])\ b /' ' – AHHP

+0

代わりに 'preg_match_all'を代わりに使用し、結果を配列に集めることをお勧めします。配列の要素を文字列に連結して結果の文字列を作成するのは問題です。PHPには、そのようなものがあります(注:正規表現に関連する関数のPHPの保存はわかりません) – fge

関連する問題