郵便のワークフローがあるアプリケーションに取り組んでいます。これらの郵便は、私のアプリケーションのビジネスルールに従って生成されます。
モデルはhtmlまたはRtfであり、ユーザーが単語を使用してrtfを作成しない限り、完全に機能します。これは仕様の範囲内ではありませんが、あまり多くの作業を必要としない場合、私の階層はWordの互換性を歓迎し、お客様の生活を楽にしてくれます。
Rtfモデルには、アプリケーション値に置き換えられるタグがあります。ほとんどのRTFでは、タグは分割されないため、検索と置換は完全に機能します。少し変更を加えて単語を処理したいと思います。
データの例:[[FooBuzz]]ほとんどのrtfでは分割されていません。
2003年の言葉で:
{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5517131 [[}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2708730 FooBuzz}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5517131 ]]}
そして彼らの言葉(言葉2007)もFoo{garbageinside}バズを分割しました。
そのため、一般的なRTFを完全に処理し、タグが分割されている場合でもタグを検出できるようにしたいと考えています。
2つの制約があります。最初に回帰はなく、次に単純なままである必要があります。ここではパフォーマンスは問題ではありません。
私はsymfony1.4を使用しています。実際の関連する研究コードの部分:
$regExpression = '/\[\[([^\[\]]*)\]\]/';
preg_match_all($regExpression, $sTemplate, $outKeys);
アップデート :
私は主にこの正規表現を完成させる必要があると思います。私はいくつかの正規表現に取り組んでいますが、まだいくつかの改善が必要です:
/([\a-zA-Z0-9]+)/
生産 :
[0] => Array
(
[0] => \rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5517131 [[
[1] => \rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2708730 FooBuzz
[2] => \rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5517131 ]]
)
アップデート2:
正規表現にはまだいくつか問題があります。実際には、最初にタグ値とプレーンテキストが検索されます。かなりの時間で何ができるのかわからない。
正規表現を変更する必要があるので、彼女は同じ結果を取得しますが、[[]]内では、実際にはプレーンテキストでも機能します。
さらに難しいのは、必要なことによってすべてのサンプルデータ(プレーンテキストではない)をキャッチできるようにする必要があることです。
タグとすべてのゴミを置き換える正規表現を置き換えます。私はほとんど成功しました:
/{.*?\[\[.*(?<!\\)\w+\b.*\]\].*?}/
しかし、それはあまりにも貪欲です。グループ{[[}{tag}{]]}と一致させたいのですが、{plain text} {[[} {tag} {]]} {plaintext}と一致します
?を追加します 私が読んだので、それは。*を欲張りにしないでしょうが、それは機能しません。何か案は ?
この正規表現(タグ検索の名前)の何が問題になっているのかわかりません:
\[\[(\b(?<!\\)\w+\b)\]\]
私の理解によると。[[]]の中に、バックスローで始まり、その後に任意の単語文字が続く単語を見つけます。私は正しいですか?
アップデート3:
申し訳ありませんが、不明でした。
私の最初の正規表現は、[[FooBuzz]]でFooBuzzをキャッチすることを目的としています。そして、[[FooBuzz]]をキャッチするための2番目。したがって、最初の正規表現では、テキストFooBuzzのみをキャッチし、他のすべて({} \ eoeoeなど)を無視します。
次に、[[FooBuzz]]を完全に置き換える必要があります。だから私は{[[}{FooBuzz}}{]]}を捕まえる必要があります。
実際、私は{[[}{FooBuzz}}{]]}}をキャッチしています。私もここでキャッチする必要がありますを参照してください。私は捕まえています:私は捕まえないプレーンテキスト[[FooBuzz]]。
[[の部分では、これをキャッチするだけで済みます:{\ rtlch \ fcs1 \ af0 \ ltrch \ fcs0 \insrsid5517131[[}。それは彼が貪欲な試合を見つけることができないからだと思います。それで彼は貪欲なモードにいます。そして、このデータサンプルで失敗します:
{\toto toto}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5517131 [[}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid2708730 FooBuzz}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5517131 ]]}{\toto toto}