2017-02-01 10 views
-2

入力テキストから不要なHTML属性を取り除くのに役立つ一般的な正規表現を書く際に問題があります。 私の入力は、私は配列にこれらの文字列の両方をプッシュしている。この間に改行があっても一致するパターンを削除するためにPerl正規表現を拡張する方法

<p data-bind="XYZ" style="text-align: center;">Untitled Template1 - art</p> 
<p><select data-bind=" 
      options:options, 
      optionsText: 'value', 
      optionsValue: 'id', 
      value: value, 
      optionsCaption:'Please select', 
      attr: { id: 'select'+id }"><option style="text-align: center;" value="8661"></option><option value="8662"></option></select></p> 

のように見えます。私は配列をループしてdata-bind属性をクリアしています。

foreach my $row (@$results) { 
    $value =~ s/\sdata-bind=".*?"//g; 
} 

結果は次のようになります。

<p style="text-align: center;">Untitled Template1 - art</p> 
<p><select data-bind=" 
      options:options, 
      optionsText: 'value', 
      optionsValue: 'id', 
      value: value, 
      optionsCaption:'Please select', 
      attr: { id: 'select'+id }"><option style="text-align: center;" value="8661"></option><option value="8662"></option></select></p> 

私の2番目の文字列からdata-bind属性を排除する方法。誰でも助けることができます。 Stackoverflowを検索して、同じ質問をしているユーザーが見つかりましたquestion。上の行で述べた答えは、正規表現は複数の行にまたがることができますが、私の場合はそうではありません。

+1

'$値=〜S/\ SDATAバインド= // GS "*。?";' – ssr1012

+0

'.'改行以外の任意の文字を参照してください。 @ ssr1012あなたのケースで動作するregexで答えました。 's'フラグ' .'は改行にマッチします。 – AbhiNickz

+0

正規表現でHTMLを解析しないでください。パーサーを使うと、あなたはCPANで多くを見つけるでしょう。 – Toto

答えて

1
my $str = "<p data-bind=\"XYZ\" style=\"text-align: center;\">Untitled Template1 - art</p> 
<p><select data-bind=\" 
     options:options, 
     optionsText: 'value', 
     optionsValue: 'id', 
     value: value, 
     optionsCaption:'Please select', 
     attr: { id: 'select'+id }\"><option style=\"text-align: center;\" value=\"8661\"></option><option value=\"8662\"></option></select></p>"; 

あなたは複数行の置き換えに使用している場合には、s修飾子を使用する必要があります。

$str=~s/\sdata-bind=".*?"//gs; 

    print $str; 
関連する問題