2011-02-03 7 views
0

regexpに問題があります。私のXMLファイルがactionscriptにロードされると、すべてのスペースが削除されます(自動的にテキストがトリミングされます)。だから私はすべてのSPACEを単語に置き換えて、後でそれを自分の解析で修正できるようにしたい。Regexp Replace(as3) - テキストを使用して置換を検索しますが、置換しません。

ここでは、調整するタグの例を示します。

<w:t> </w:t> 
<w:t> Test</w:t> 
<w:t>Test </w:t> 

これは私が望む結果です。

<w:t>%SPACE%</w:t> 
<w:t>%SPACE%Test</w:t> 
<w:t>Test%SPACE%</w:t> 

私が得た最も近い結果が<w:t>\s|\s</w:t>

最大の問題は、それがすべてを破壊したXMLファイル内のすべてのスペースを変更することです。 w:tノード内でのみ変更されますが、テキストは破棄されません。

+0

テストテスト 'についてですか? 3つのスペースをすべて交換する必要がありますか? –

答えて

0

非常にうまくいかない回避策を作成しました。しかし、よく問題は、あなたが時計に逆らって作業することです。

代わりに3回交換を実行します。

 
var reg1 : RegExp = /<w:t>\s/gm; 
data = data.replace(reg1, "<w:t>%DEADSPACE%"); 

var reg2 :RegExp = /\s<\/w:t>/gm; 
data = data.replace(reg2, "%DEADSPACE%</w:t>"); 

var reg3 :RegExp = /<w:t>\s<\/w:t>/gm; 
data = data.replace(reg3, "<w:t>%DEADSPACE%</w:t>"); 

RegExp、何が良いですか。 Absolutly何も(歌);)

+0

Regexは、正しく使うとかなり良いです。それだけで練習が必要です。 (私は納得しているように、実際には事実を述べていません。 –

1
var reg1 : RegExp = /((?:<w:t>|\G)[^<\s]*+)\s/g; 
data = data.replace(reg1, "$1%SPACE%"); 

(?:<w:t>|\G)は、すべての試合が直前の試合後<w:t>タグ、またはから始まりを意味しません。 [^<\s]は閉鎖</w:t>タグ(または他のタグ)と一致できませんので、すべての一致は<w:t>要素内にあることが保証されています。

  • \s' 'だけではなく、空白のいくつかの他の種類と一致しますよう

    が適切にこれを行うには、あなたは、いくつかのより多くの質問に対処する必要があります。 の空白文字を%SPACE%に置き換えますか?あるいは、' 'がこれらの要素の中で唯一の空白であることは知っていますか?

  • <w:t>要素内に他の要素(たとえば、<w:t> test <xyz> test </xyz> </w:t>)がありますか?そうであれば、正規表現はより複雑になりますが、まだ実行可能です。

Iは、ActionScriptをテストするために設定されていないんだけど、ここではフードの下PCREライブラリを使用してPHPでのデモは、AS3のように、です:
test it on ideone.com

EDIT:ほかに最後の一致が途切れたところで一致するのは\Gで、入力の先頭に一致します(\Aのように)。これは正規表現の問題ではありませんが、ideoneデモではそれがあります。あなたはfalseignoreWhiteSpaceプロパティを設定することで、空白を無視しないように指定することができ、ActionScriptの標準XMLクラスを使用してXMLを解析すると、その正規表現は

((?:<w:t>|\G(?!\A))(?:[^<\s]++|<(?!/w:t>))*+)\s 
1

でなければなりません。デフォルトではtrueに設定されています。これにより、XMLテキストノードの空白が確実に保持されます。あなたはそれであなたが望むものを何でもすることができます。

XML.ignoreWhiteSpace = false 
/* parse your XML here */ 

このように、正規表現で悩む必要はなく、標準のXML ActionScript解析を使用できます。