2017-04-25 8 views
0
replace: 
    path: "{{ drupal.install_dir }}/{{ drupal.project_name }}/sites/default/settings.php" 
    regexp: '(\s+)(\'database\' => \'{{ drupal.database_name }}\',)$' 
    replace: '\1\2\n\1\'charset\' => \'utf8mb4\',\n\1\'collation\' => \'utf8mb4_unicode_ci\',' 

に関するしかし、エラーを与える:奇妙なエラー正規表現

path: "{{ drupal.install_dir }}/{{ drupal.project_name }}/sites/default/settings.php" 
regexp: '(\s+)(\'database\' => \'{{ drupal.database_name }}\',)$' 
       ^here 

しかし、それは私が回避策を見つけhttps://regex101.com/

+0

エラーの内容はどこですか?そして、なぜ表現全体を二重引用符で囲むだけでいいのですか?単一のものをエスケープする代わりに。 – techraf

+0

@techraf二重引用符は動作しません(少なくとも私にとっては、私はすでに試してみました。すべての例は一重引用符で囲まれています)。エラー内容は私があなたに示したものであり、ゴミ箱があるだけです。基本的に構文エラーがあると言います。正規表現を置き換えて置き換えると、エスケープされた一重引用符のすぐ隣に置き換えてエラーが表示されます – JorgeeFG

答えて

1

利用、二重引用符(あなたがしてバックスラッシュを繰り返す必要があり):

replace: 
    path: "{{ drupal.install_dir }}/{{ drupal.project_name }}/sites/default/settings.php" 
    regexp: "(\\s+)('database' => '{{ drupal.database_name }}',)$" 
    replace: "\\1\\2\\n\\1'charset' => 'utf8mb4',\\n\\1'collation' => 'utf8mb4_unicode_ci'," 
+0

ありがとう、これははっきりしています。これを「一度しか適用しない」ようにする方法を知っていますか? – JorgeeFG

+0

どういう意味ですか? – techraf

+0

これを何度も実行すると、 "replace"が複数回追加されてしまいます...まあ、置換えされていなくて、そのようなものはもっとたくさんあります(正規表現を見れば、 ) – JorgeeFG

0

で動作します:

replace: 
     path: "{{ drupal.install_dir }}/{{ drupal.project_name }}/sites/default/settings.php" 
     regexp: '^(\s+)(\x27database\x27 => \x27{{ drupal.database_name }}\x27,)$' 
     replace: '\1\2\n\1"charset" => "utf8mb4",\n\1"collation" => "utf8mb4_general_ci",' 

幸いにも私は二重引用符を入れ替えることができますとシングルクォーテーション(PHP配列)です。 \ x27回避策は、置換では機能しませんが、正規表現では機能します。 (\ X27 =「)

0

single quote style scalarの中で、あなたがそのスカラーの一部である任意の単一引用符を 『エスケープ』する必要があります余分な単一引用符:

regexp: '(\s+)(\''database\'' => \''{{ drupal.database_name }}\'',)$' 
    replace: '\1\2\n\1\''charset\'' => \''utf8mb4\'',\n\1\''collation\'' => \''utf8mb4_unicode_ci\'',' 

いない他の文字をする必要があります(または可能)は、それらの単一引用符スタイルのスカラー内、脱出しました。

関連する問題