2011-07-24 19 views
0

置き換える属性の複数の値を一致させたい。たとえばant buildscriptのhtmlでの複数の属性値の一致

<div class="div h1 full-width"></div> 

div、h1、およびfull-widthを別個の一致として生成する必要があります。 私はクラスの前にこれをしたいと思います。だからではなく、私が持っているSOFAR正規表現のdiv H1全幅それがされなければならない事前divの前全幅前H1

(?<=class=["'])(\b-?[_a-zA-Z]+[_a-zA-Z0-9-]*\b)+ 

これが唯一のファーストクラスと一致します。このパターンは一致するはずの唯一のものであるため、これはオフコースです:(私はlookbehindをclass = "もっと多く取るようにしようとしましたが、すべてを取り、何も残さずに置き換えます。 パターンを作りたい

すべてのファイルを処理し、class = "value1 value2 value3"を接頭辞で置き換えたAnt buildscriptでこれを実行したいと思います。 cssファイルが、あなたがたのHTML内のクラスを交換する手間がトリッキーたくさんしているようだ

それはAntのbuildscriptあるJava regexp packageパターンを処理するために使用される使用蟻タグは次のとおりです。。。replaceregexp

上記のパターンのアリimplemtentationがある:

<target name="prefix-class" depends=""> 
    <replaceregexp flags="g"> 
    <regexp pattern="(?&lt;=class=['&quot;])(\b-?[_a-zA-Z]+[_a-zA-Z0-9-]*\b)+"/> 
    <substitution expression=".${prefix}\1"/> 
    <fileset dir="${dest}"/> 
    </replaceregexp> 
</target>  
+0

regexpを処理するツール/言語はありますか? – Chris

+0

更新された質問 –

+0

Mhm ...あなたはn個(またはあなたのケースでは3個)の異なるクラスのエントリとsubstitudeを1つの簡単な正規表現で見つけることはできません。あなたが蟻でこれを行う必要があるなら、私はあなた自身の蟻の仕事を書かなければならないと思う。より良い方法はxsltだろう、あなたはxsltに精通していますか? – Chris

答えて

0

AntR ReplaceRegExpを教えて、XSLTで問題をソートして、xhtmlをxhtmlに変換してください。

次のコードは、要素クラス属性のすべての値に接頭辞を追加します。 xhtmlソース文書を適切に解析して解析する必要があります。

<xsl:stylesheet version="2.0" 
xmlns:xhtml="http://www.w3.org/1999/xhtml" 
xmlns="http://www.w3.org/1999/xhtml" 
xmlns:fn="http://www.w3.org/2005/xpath-functions" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
exclude-result-prefixes="xhtml xsl xs"> 

    <xsl:output method="xml" version="1.0" encoding="UTF-8" 
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1.dtd" 
    indent="yes" omit-xml-declaration="yes"/> 

    <xsl:param name="prefix" select="'oo-'"/> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="./@*|./node()" /> 
    </xsl:template> 

    <!--remove these atts from output, default xhtml values from dtd --> 
    <xsl:template match="xhtml:a/@shape"/> 
    <xsl:template match="@rowspan"/> 
    <xsl:template match="@colspan"/> 

    <xsl:template match="@class"> 
    <xsl:variable name="replace_regex"> 
     <xsl:value-of select="$prefix"/> 
     <xsl:text>$1</xsl:text> 
    </xsl:variable> 
    <xsl:attribute name="class"> 
     <xsl:value-of select="fn:replace(. , '(\w+)' , $replace_regex)"/> 
    </xsl:attribute> 
    </xsl:template> 

    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
0

私はあなたを見つけるのn(またはあなたのケース3には)別のクラスのエントリを一つの単純な正規表現でそれらをsubstitudeできるとは思いません。あなたが蟻でこれを行う必要があるなら、私はあなた自身の蟻の仕事を書かなければならないと思う。より良い方法はxsltだろう、あなたはxsltに精通していますか?