2016-07-14 21 views
3

私は、スプレッドシートにこのようなエントリで始まる:ColdFusionの正規表現-INGのロジックが妙に

spreadsheetPic

お知らせ許可日後に長い一つの異なるサイズのダッシュを..私が正しいならばChr(8211)。

私は、クエリにスプレッドシートを回す:

queryPic

私は、セルの値と、それのうち正規表現最初のビットを取得します。 (正規表現パターンが少しくらいのようだが、それは動作します)

//i make a new query and set one cell 
querysetcell(newquery,"permitDateHeader",rereplace(cellWithPermitDate, 
    "^[(\W)]*(\w)*(\s)*(\w)*(\s)*(\w)*(:| -| –)+","","all"), insertRow); 

しかし、私はまだこれが残っています:正規表現は、ちょうど2つの小さなダッシュで建設タイプに取り組ん

wrongoutput

お知らせ。

rightoutput

だから私は(この他のものがコントローラで実行されていた)テストページの.CFMを作成

number = "Permit Number: 2016-1"; 
date = "- Permit Date – January 13, 2016"; 
reformednumber = rereplace(number,"^[(\W)]*(\w)*(\s)*(\w)*(\s)*(\w)*(:| -| –)+","","all"); 
reformeddate = rereplace(date,"^[(\W)]*(\w)*(\s)*(\w)*(\s)*(\w)*(:| -| –)+","","all"); 
writeDump(reformednumber); 
writeDump(reformeddate); 

そして、これがダンプされているものです。

pagedump

許可日が正常に解析されました。今度は、コントローラではなく.cfmページで、クエリに入れます。それが私が見る唯一の違いです。同じ正規表現。

どうしてですか?

可能な解決策は正規表現を変更することです。私はドル記号のような\ Wの範囲に該当する値を拾いたくはありませんでした。

このを再作成することができないならば、それはあまりにも「アプリケーション固有の」フォーラムに残されるエラーのかもしれません。

+1

パターンの最初の出現のみを破棄したいので、 '' rereplace''の '' all "'パラメータを削除したいかもしれません。 – Alex

+1

長いハイフンがchar(8211)だと思うのなら、正規表現でそれを考慮しないのはなぜですか?ちなみに、ColdFusionのasc()関数は、その文字が実際に何であるかを示します。 –

+0

@DanBracuk あなたが正しいですが、私はそれを試して、出力にダッシュの代わりに@%〜またはいくつかの奇妙な文字が残っていました。あまりにも多くを演奏していませんでした。 –

答えて

1

それが起こったが、正規表現にこの編集がそれを修正しているようだ、なぜ私はまだわかりません。

^[(\W)]*(\w)*(\s)*(\w)*(\s)*(\w)*(\s)*(\W)? 
//used(\W)? at the end rather than (:| -| –)+ 
+0

ワイドダッシュ '-'はあなたの正規表現ではおそらく不適切にエンコードされていました。 CFは、BOMなしで保存すると、テンプレート内のUnicodeを壊す傾向があります。 – Alex

+0

私はスペースのようなユニコード文字で過去の問題にぶつかってきたので、私は\ "s"の代わりに\ sをお勧めします。MS製品の値をコピー&ペーストするときに、「非改行スペース」が導入されることがあります。値は表示されず、CFのtrim()を使用して自動的にトリムされません。 –

+0

@Alexは文字コードの修正を使用していますか? –