2016-07-14 81 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); 

不過,我還是離開了我這一點:

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

寬的短劃線'''可能在您的正則表達式中編碼不正確。如果在沒有BOM的情況下保存,CF往往會在模板中搞亂Unicode。 – Alex

+0

因爲我們遇到過類似空間的unicode字符的問題,所以我會推薦使用\「而不是」「。偶爾從MS產品複製並粘貼數值時,會引入「不間斷空間」。該值不可見,也不會使用CF的trim()自動修剪。 –

+0

@Alex是否使用字符代碼修復? –