目前分類:Regex (19)

瀏覽方式: 標題列表 簡短摘要

  在Perl裡透過systtem或用雙倒引號(`)執行外部程式可以。但使用crontab卻不行,前提確認了權限已足,經Google大師開示,要先執行profile。

下command:crontab -e進入vi編輯:

Jemmy 發表在 痞客邦 留言(0) 人氣()

  這案子後期用Perl機會難得的多,就出個Java的跨行比對的Perl版。第一步,Java將javaue.def檔案內容轉成一個String,Perl如法泡製更簡單,因為不太用,不得其法:

  一般是@lines = <F>;來將檔案內容全存進陣列變數,若是$line = <F>則只存第一列。而想$line涵蓋檔案內容,必須先執行undef $/;才行。$/是換行變數,預設是\n,可以改變它為其它字符,而undef它表示使用鑽石符號<>不必分列讀進,一口氣英文…不,一口氣讀進變數。

Jemmy 發表在 痞客邦 留言(2) 人氣()

摘自http://catchtest.pixnet.net/blog/post/21981758網站:

換行符號有兩種,一個叫Cr(carriage return),一個是Lf(line feed)

Jemmy 發表在 痞客邦 留言(0) 人氣()

  最初用Perl來Code Generate和Parse Log,現在可以變成專案交付的程式之一了。實作兩個不錯用的工具程式,可以設定於crontab。因為沒設定Perl主題,姑且併到Regex吧!

第一個是用於偵測特定process是否陣亡,若陣亡予以重啟,並透過SMTP發Mail告警,這雖然也可以用bash辦到,但搞不好還有Run在Windows的需求。

Jemmy 發表在 痞客邦 留言(0) 人氣()

  在家加班會有點不甘願,但研究和工作有關的技能倒還可以。Java在Regex的跨行比對有點彆扭,用來解析非XML、具Block性質的配置檔會比較清晰。需求如下:

*

Jemmy 發表在 痞客邦 留言(0) 人氣()

  在XML的特殊字元有五:<、>、&、'、"。通常轉特殊字元方式是像把&轉成&amp;。另一種不轉的方式,就是加<![CDATA[><&'" ]]>包覆。所以我有個需求是,避免產出的XML檔變肥,遇到有特殊字元的值,才用<![CDATA[… ]]>包覆。在Java借助Regex方式如下:

colValue.matches(".*[><&'\"].*")

  Java字串的matches方法一定要全域match,所以中括號裡的特殊字元前後都要加.*。

Jemmy 發表在 痞客邦 留言(0) 人氣()

  在為轉碼傷腦筋時,曾想把內碼轉成Unicode表示法如:\u4E00的字串混過去。雖然後來不用,不過運用Java Regex把Unicode表示法轉成Unicode字元可以一記:

str = "ABC\\u7CBE\\u8AA0";

Jemmy 發表在 痞客邦 留言(0) 人氣()

  有個看我的Blog而加入我的msn一個網友,有個Regex問題如下:

1101,"24,236,136","7,256","641,351,276","123",25.50,27.10,25.50,26.60,+,1.20,26.55,213,26.60,125,10.73

Jemmy 發表在 痞客邦 留言(4) 人氣()

  原本妄想繼承LazyValidatorForm來避免繼承ActionServlet,就不用動到web.xml設定達到Date型態通透性。結果是不可能,不過倒是玩了一下下日期在Regex的判斷:

import java.util.regex.Matcher;

Jemmy 發表在 痞客邦 留言(0) 人氣()

  好像是Oracle 10g以上才有SQL支援Regex的語法,SQL本身就是宿主語言,Regex又寄宿在SQL上,真是宿主的宿主。

  假設Student Table的學號(STD_NO)有:1001~1100,有個Property有key_name和value_context兩個欄位,是key-value值,其中一筆:key_name值為Black,value_context值為1002,1009,1099。如何以一行SQL,把Student table濾掉Black所指定的以逗號分割的學號。

Jemmy 發表在 痞客邦 留言(0) 人氣()

  Sample:把20090601,20090610,20090611這串日期序列轉成2009-06-01,2009-06-10,2009-06-11,Perl有記憶小括號,Java則需費周章用Matcher的group,可是單單用String的replaceAll也能辦到,如下:

  SampleString.replaceAll("(\\d{4})(\\d{2})(\\d{2})", "$1-$2-$3"); $1是記憶左起第一個括號,$2是第二個,以此類推,因此若若要改成DDMMYYYY,只需在第二個參數改成$3-$2-$1即可。

Jemmy 發表在 痞客邦 留言(0) 人氣()

  簡訊內容要是太長,可以分兩則甚至多則簡訊發送,但是中間要是有斷字就不好看了,比如Ho在第一則簡訊最後,llo跑到第二則簡訊開頭。這解決原本不難,這時又有一個需求如:(1)1包/100元(2)6包/500元(3)10包/800元。若第一則簡訊切成最後是:(1)1包/100元(2)6;第二則簡訊卻是:包/500元(3)10包/800元。也不好看。除了斷空白字,還要斷左括號,可是空白字和左括號都要保留在簡訊內容。這時Regex的(?=)語法可以派上用場:

String[] sa = msg.split("(?= |\\()");

Jemmy 發表在 痞客邦 留言(0) 人氣()

  為了Parse 1GB多的Log檔,挑出有Exception的樣式,用UltradEdit等Editor肯定大量消耗Memory。還是用Perl寫個小程式簡單。如下:

#!/usr/bin/perl

Jemmy 發表在 痞客邦 留言(2) 人氣()

  Java在Regex的支援看來不及Perl。需求如右:"FBI 34"這個字串要取得後綴字為1~2的數字,即"34",在Perl用法就很簡單:

"FBI 34" =~ /(\d{1,2})$/;

Jemmy 發表在 痞客邦 留言(0) 人氣()

  ActiveState是微軟轉投資的研發script語言如Perl、Python、Tcl在Windows下運行的執行環境,PPM(Perl Package Manager)下載DBD:Oracle連Oracle沒問題,但找不到DBD:MySQL,最後下載到DBD:mysqlPP,寫連結程式還是不行,最後是下面DNS才過關:

dbi:mysqlPP:database=$sid;host=$host

Jemmy 發表在 痞客邦 留言(0) 人氣()

一位朋友曾叫我幫忙改個工具,可以指定要Search什麼Tag,這的確是很好的Regex題目,而且可以用Java Script達成,但因為涉及File IO需要用IE,以下的Sample中最重要的function是SearchTag,這Function還是有Bug存在,容後解說:
<html>

Jemmy 發表在 痞客邦 留言(0) 人氣()

有以下的特殊量詞,摘例於O'Reilly的正規式速查手冊:
例:The name "McDonald's" is said "makudonarudo" in Japanese.

Jemmy 發表在 痞客邦 留言(0) 人氣()

Regex當中的lookaround技巧是較少見到,會用卻是很有用,以下以Perl說明之:
my @nth = qw/1st 2nd 3rd 4th 5th 6th nth/;    被比較的內容1

Jemmy 發表在 痞客邦 留言(0) 人氣()

在Trace中途接手的專案,常以關鍵字搜尋未知的原始程式碼,期能在最短時間找到原因解決之.
若學會Regular Expression,搜尋過程往往能事半功倍,所付出的代價就是要學會該Regular Expression,這是必然.

Jemmy 發表在 痞客邦 留言(0) 人氣()