2017-02-08 12 views
0

以下のコードでは、正しく機能していないCSSファイルの一部を正しいコードを保持するCSSファイルに置き換えようとしています。"正規表現パターンが有効ではない"正規表現を配列に置き換えるとき

パート1では、両方のファイルを取得します。

パート2では、bad.cssの無効な部分を正規表現でフィルタリングします。

パート3では、悪いCSSをgood.cssファイルに置き換えたいとします。しかし、私は "正規表現のパターンは有効ではありません"というエラーを受け取ります。

$bはArrayの型であり、$dはStringの型であることに注意してください。しかし、私はそれが違いを生むかどうか本当に分かりません。

$c = $c -replace [regex]::Escape($d), $b 

あるいは代わり-replaceオペレータの.Replace()方法を使用する:リテラル(サブ)文字列と一致するよう

#1. get files 
$overrider = (Join-Path $powerShellResourcePath "good.css") 
$b = Get-Content $overrider 

$stylingOverride = (Join-Path $contentPath "bad.css") 
$c = Get-Content $stylingOverride 

#2. gets the part that should be replaced in bad.css 
$d = [Regex]::Matches($c, '(start)(.*?)(end)') | Select -ExpandProperty Value 

#3. should replace the regex part in bad.css with the whole good.css 
if ($d) { 
    $c = $c -replace $d, $b 
    Set-Content $stylingOverride -Value $c 
} 
+1

置き換えたときの '$ d'の値は何ですか?多分あなたはそれをエスケープする必要があります - '[Regex] :: Escape($ d)'。また、 'start'と' end'は '$ d'の一部です。区切り文字を除外する必要があるかもしれません。 ''(?<= start)。*?(?= end) '' –

+0

'$ d'の値は、開始と終了の間のすべてです。私は '[Regex] :: Escape($ d)'を試しましたが、実際にはエラーを修正しました。しかし、CSSファイルでは何も変わっていません。 – 2hTu2

+0

これは値の 'start'と' end'のためです。試してみてください($ c、 '(?<= start)。*?(?= end)') ' –

答えて

1
は、抽出された文字列をエスケープ

。前者は単純な文字列の置換を行い、後者は正規表現の置換を行います。

$c = $c.Replace($d, $b) 
関連する問題