http://hi.baidu.com/forsona/home
2010年12月31日 星期五
2010年12月29日 星期三
2010年12月26日 星期日
2010年12月25日 星期六
2010年12月15日 星期三
2010年12月13日 星期一
usort with static comparison function
class Thread{
public static function __compare($thread_a, $thread_b){
return $thread_a->posts_numbers > $thread_b->posts_numbers ? 1 : ($thread_a->posts_numbers == $thread_b->posts_numbers ? 0 : -1);
}
}
usort($this->sorted_threads, array('Thread', '__compare'));
http://php.net/manual/en/function.usort.php
usort with static comparison function
class Thread{
public static function __compare($thread_a, $thread_b){
return $thread_a->posts_numbers > $thread_b->posts_numbers ? 1 : ($thread_a->posts_numbers == $thread_b->posts_numbers ? 0 : -1);
}
}
usort($this->sorted_threads, array('Thread', '__compare'));
http://php.net/manual/en/function.usort.php
2010年12月11日 星期六
2010年12月10日 星期五
アマガミ
之前中過キミキス的毒,沒想到現再又陷入アマガミ的泥沼,只能說編劇太有才了(゚∀゚)
我也想當學姐的狗阿(゚д。)
公式:http://www.tbs.co.jp/anime/amagami/index-j.html
WIKI:http://zh.wikipedia.org/zh-tw/%E8%81%96%E8%AA%95%E4%B9%8B%E5%90%BB
アマガミ
之前中過キミキス的毒,沒想到現再又陷入アマガミ的泥沼,只能說編劇太有才了(゚∀゚)
我也想當學姐的狗阿(゚д。)
公式:http://www.tbs.co.jp/anime/amagami/index-j.html
WIKI:http://zh.wikipedia.org/zh-tw/%E8%81%96%E8%AA%95%E4%B9%8B%E5%90%BB
アマガミ
之前中過キミキス的毒,沒想到現在又陷入アマガミ的泥沼,只能說編劇太有才了(゚∀゚)
我也想當學姐的狗阿(゚д。)
公式:http://www.tbs.co.jp/anime/amagami/index-j.html
WIKI:http://zh.wikipedia.org/zh-tw/%E8%81%96%E8%AA%95%E4%B9%8B%E5%90%BB
アマガミ
之前中過キミキス的毒,沒想到現在又陷入アマガミ的泥沼,只能說編劇太有才了(゚∀゚)
我也想當學姐的狗阿(゚д。)
公式:http://www.tbs.co.jp/anime/amagami/index-j.html
WIKI:http://zh.wikipedia.org/zh-tw/%E8%81%96%E8%AA%95%E4%B9%8B%E5%90%BB
2010年12月9日 星期四
正規表示 Regular Expression – RegExp (Perl 相容)
http://webdesign.kerthis.com/post/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%A4%BA-regular-expression
本文介紹相容於Perl正規表示式(Regular Expression、RegEx)的符號與各種語法:
特殊字元(字串)
.
表示除了換行字元(\n)外的任意字元。(除非在s單列模式下才 . 才可比對\n)
\w
表示任意英文字母及數值字元。
\W
表示\w所接受的字元通通不接受。
\s
表示任意空白字元,如空白鍵及tab鍵。
\S
表示接受任何非空白字元
\d
表示接受任意數字字元
\D
表示任何非數字的字元
\n
表示換行字元
\r
表示return對應的字元
\t
表示tab鍵的字元
\b
比對字的邊界
\B
非字的邊界
\v
vertical Tab
\f
from feed
\nnn
八位元碼為nnn的字元
\xnn
十六位元碼為nn的字元
\unnnn
unicode為nnnn的字元
跳脫字元
\
用來跳脫特殊字元,任何「非數值」的字元可以透過反斜線\代表直接以該字元為樣板宣告。例如\^是表示^這個字元,而非代表字組的起始字元。要跳脫反斜線本身則可用\\來表示。
匹配多個可接受的字元組
[]
例如[ace]表示匹配一個字元而這個字可能是a或c或e。此外,在中括號裡面的特殊字元其特別意義都不再存在,也就是只表示單純字面上的意義。另一方
面,中括號裡面的特殊字元有破折號-及脫字符號^。-代表某一範圍內之字元的意思,如[a-z]表示所有小寫英文字母;而^放在中括號中則表是否定的意
思,如[^a]表示非a之外的任意字元。
擇一、選替 Alternatives
|
當要匹配幾個特定的選擇時,則要使用特殊字元|,其代表擇一的意思。舉例來說,a|b表示字元為a或者為b。使用時需注意前後的次序,因為在|中的字組會優先選擇符合最左邊的項目。
群組 Group
(群組)
例如(abc){2}會匹配abcabc。
抓取、參照、記憶
(expression)
匹配符合的expression並將它抓取進自動命名的群組(命名順序由1開始至23456··)。例如(abc)表示匹配abc並將它記錄到群組1,而你就可以用backreference \1來取出這個抓取到的群組,換句話說\1就是abc。
(?<name>expression)
如果你不喜歡群組自動命名的1,也可以自己來命名,我們將上面例子改寫,(abc)改寫成(?<name>abc),如此就可以將抓取的群組命名為name了,要取出它則用\k<name>。
(?:expression)
此式表示匹配但不抓取它
標位點與零寬比對
為什麼說零寬呢?因為本身並不會對應任何文字,只用來界定位置
^
字串起點。在m多列模式下則包括任何\n字元之後的位置。如^abc為比對符合開頭為abc的字組。
\A
字串起點,無論何種比對模式下(不像^,\A皆不包括任何\n字元之後的位置)。
$
字串結尾。在m多列模式下則包括任何\n字元之前的位置。如abc$為比對符合結尾為abc的字組。
\Z
字串結尾,無論何種比對模式下(即.\Z比對abc\ndef會得f)。
\b
字詞邊界。包括介於\w與\W字元之間的位置,以及自串起點與結尾。如可用「.\b」來比對「c」於「abc」中。
\B
非字詞邊界。
標位點與零寬比對 - Lookaround
什麼是lookahead及lookbehind
assertions?它們是用來搜尋目前pattern之前或之後的字元組,但並不包含match
assertions本身。再更詳細一點,Lookaround有點像是「^」、「$」、「\b」這些特殊字元,即本身並不會對應任何文字,只用來界定位
置,故我們將它們稱做zero-width assertions,我們往下看看lookaround可以做些什麼。
Positive Lookaround
(?=expression)
符合字尾為expression的字組
例:我們可以用\w+(?=ing)來符合字尾為ing的字,但不會包含ing本身,像我們拿來匹配filling這個字得到的就會是fill。
(?<=expression)
符合字首為exp的字組
例:我們可以用(?<=g)\w+來符合字首為g的字,但不會包含g本身,像我們拿來匹配good這個字得到的就會是ood。
Negative Lookaround
(?!expression)
符合字尾沒接expression的字組
(?<!expression)
符合字首沒接expression的字組
描述次數的特殊字元 (量詞)
貪多量詞 (greedy quantifiers)
貪多是什麼意思?簡單的說,比對以「多」為原則。如(ab)+可比對出整個ababababababab。
這類量詞會盡可能的消耗受比對的字串(就是越多越好~),但當消耗過多造成後續樣式比對失敗則會逐漸放棄部分的比對結果,一直到同時滿足後續樣式為止,這個放棄的過程我們稱作「回步(backtrackin)」。
{幾次} 、 {幾次, 到幾次} 、 {幾次以上,}
舉例來說,a{3}代表連續3個a;a{1,3}表示可能是a、aa或aaa;a{1,}則表示a有一個以上。
*
表示指定的字元可以出現任意次數,即0次到無限多次。
+
表示指定的字元重覆至少一次
?
表示指定的字元重覆零次或一次
不貪多(惰性)量詞 (lazy quantifiers)
相反的,即以少(長度最短)為原則。如(ab)+?比對ababababababab結果為ab。
*?
出現0或多次,但以少為原則。
+?
出現1次或多次,但以少為原則。
+?
出現0次或1次,但以少為原則。
支配量詞 (possessive quantifiers)
這有點像貪多量詞,但差在它們不回步,講白一點就是它們就是要「多」。就算後續比對失敗也不管、不讓步。
*+
出現0或多次,不回步。
++
出現1次或多次,不回步。
?+
出現0次或1次,不回步。
{n次}+
至少出現n次,不回步。
{n次,}+
至少出現n次,不回步。
{m次,n次}+
至少出現m次但不超過n次,不回步。
(?>比對樣式) 單體組 Atomic group
不回步,整個比對出來樣文段,在回步時會被視做一個單體,不可以部分被丟棄。例如(?>[abc]+\w\w)可比對出abcabcdd,但比對abcaabbcc會造成失敗,因為abcaabbcc已經被當成「一體」的。
呼~最後來談一下註解還有模式飾詞吧
模式飾詞 Mode modifier (或稱flag)
modifier是用來告訴正規式引擎對於正規表示式的解釋方式。
i
不區分大小寫
m
多列模式,「^」及「$」在此模式下表示\n的相鄰字元
s
單列模式,「.」代表任何字元,包括\n
x
忽略空白字元,容許樣式中出現註解「#···」
U
反轉量詞的貪多性質,「*」變不貪多;而「*?」則變貪多
A
強制從受測字串的起點開始比對
D
強制「$」代表字串結尾,而非\n前的字元,但若有開啟多行模式m則以多行模式為主
u
將正規式與受測字串皆當作UTF-8字元處理
(?mode)
以指定模式來比對後續字串,如(?i)接下來比對不分大小寫
(?-mode)
取消模式,(?i)接下來比對不分大小寫(?-i)接下來回復分大小寫
(?mode:···)
以指定的模式來比對括弧內的樣式
(?-mode:···)
取消模式對括弧內的樣式的影響
\Q······\E
將\Q及\E 之間的特殊字元視作一般字元
(?#···)
括弧內的字串視作註解
#······
在x模式下,#後到列尾的字串都當作是註解
繼續閱讀:
http://perldoc.perl.org/perlre.html
正規表示 Regular Expression – RegExp (Perl 相容)
http://webdesign.kerthis.com/post/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%A4%BA-regular-expression
本文介紹相容於Perl正規表示式(Regular Expression、RegEx)的符號與各種語法:
特殊字元(字串)
.
表示除了換行字元(\n)外的任意字元。(除非在s單列模式下才 . 才可比對\n)
\w
表示任意英文字母及數值字元。
\W
表示\w所接受的字元通通不接受。
\s
表示任意空白字元,如空白鍵及tab鍵。
\S
表示接受任何非空白字元
\d
表示接受任意數字字元
\D
表示任何非數字的字元
\n
表示換行字元
\r
表示return對應的字元
\t
表示tab鍵的字元
\b
比對字的邊界
\B
非字的邊界
\v
vertical Tab
\f
from feed
\nnn
八位元碼為nnn的字元
\xnn
十六位元碼為nn的字元
\unnnn
unicode為nnnn的字元
跳脫字元
\
用來跳脫特殊字元,任何「非數值」的字元可以透過反斜線\代表直接以該字元為樣板宣告。例如\^是表示^這個字元,而非代表字組的起始字元。要跳脫反斜線本身則可用\\來表示。
匹配多個可接受的字元組
[]
例如[ace]表示匹配一個字元而這個字可能是a或c或e。此外,在中括號裡面的特殊字元其特別意義都不再存在,也就是只表示單純字面上的意義。另一方
面,中括號裡面的特殊字元有破折號-及脫字符號^。-代表某一範圍內之字元的意思,如[a-z]表示所有小寫英文字母;而^放在中括號中則表是否定的意
思,如[^a]表示非a之外的任意字元。
擇一、選替 Alternatives
|
當要匹配幾個特定的選擇時,則要使用特殊字元|,其代表擇一的意思。舉例來說,a|b表示字元為a或者為b。使用時需注意前後的次序,因為在|中的字組會優先選擇符合最左邊的項目。
群組 Group
(群組)
例如(abc){2}會匹配abcabc。
抓取、參照、記憶
(expression)
匹配符合的expression並將它抓取進自動命名的群組(命名順序由1開始至23456··)。例如(abc)表示匹配abc並將它記錄到群組1,而你就可以用backreference \1來取出這個抓取到的群組,換句話說\1就是abc。
(?<name>expression)
如果你不喜歡群組自動命名的1,也可以自己來命名,我們將上面例子改寫,(abc)改寫成(?<name>abc),如此就可以將抓取的群組命名為name了,要取出它則用\k<name>。
(?:expression)
此式表示匹配但不抓取它
標位點與零寬比對
為什麼說零寬呢?因為本身並不會對應任何文字,只用來界定位置
^
字串起點。在m多列模式下則包括任何\n字元之後的位置。如^abc為比對符合開頭為abc的字組。
\A
字串起點,無論何種比對模式下(不像^,\A皆不包括任何\n字元之後的位置)。
$
字串結尾。在m多列模式下則包括任何\n字元之前的位置。如abc$為比對符合結尾為abc的字組。
\Z
字串結尾,無論何種比對模式下(即.\Z比對abc\ndef會得f)。
\b
字詞邊界。包括介於\w與\W字元之間的位置,以及自串起點與結尾。如可用「.\b」來比對「c」於「abc」中。
\B
非字詞邊界。
標位點與零寬比對 - Lookaround
什麼是lookahead及lookbehind
assertions?它們是用來搜尋目前pattern之前或之後的字元組,但並不包含match
assertions本身。再更詳細一點,Lookaround有點像是「^」、「$」、「\b」這些特殊字元,即本身並不會對應任何文字,只用來界定位
置,故我們將它們稱做zero-width assertions,我們往下看看lookaround可以做些什麼。
Positive Lookaround
(?=expression)
符合字尾為expression的字組
例:我們可以用\w+(?=ing)來符合字尾為ing的字,但不會包含ing本身,像我們拿來匹配filling這個字得到的就會是fill。
(?<=expression)
符合字首為exp的字組
例:我們可以用(?<=g)\w+來符合字首為g的字,但不會包含g本身,像我們拿來匹配good這個字得到的就會是ood。
Negative Lookaround
(?!expression)
符合字尾沒接expression的字組
(?<!expression)
符合字首沒接expression的字組
描述次數的特殊字元 (量詞)
貪多量詞 (greedy quantifiers)
貪多是什麼意思?簡單的說,比對以「多」為原則。如(ab)+可比對出整個ababababababab。
這類量詞會盡可能的消耗受比對的字串(就是越多越好~),但當消耗過多造成後續樣式比對失敗則會逐漸放棄部分的比對結果,一直到同時滿足後續樣式為止,這個放棄的過程我們稱作「回步(backtrackin)」。
{幾次} 、 {幾次, 到幾次} 、 {幾次以上,}
舉例來說,a{3}代表連續3個a;a{1,3}表示可能是a、aa或aaa;a{1,}則表示a有一個以上。
*
表示指定的字元可以出現任意次數,即0次到無限多次。
+
表示指定的字元重覆至少一次
?
表示指定的字元重覆零次或一次
不貪多(惰性)量詞 (lazy quantifiers)
相反的,即以少(長度最短)為原則。如(ab)+?比對ababababababab結果為ab。
*?
出現0或多次,但以少為原則。
+?
出現1次或多次,但以少為原則。
+?
出現0次或1次,但以少為原則。
支配量詞 (possessive quantifiers)
這有點像貪多量詞,但差在它們不回步,講白一點就是它們就是要「多」。就算後續比對失敗也不管、不讓步。
*+
出現0或多次,不回步。
++
出現1次或多次,不回步。
?+
出現0次或1次,不回步。
{n次}+
至少出現n次,不回步。
{n次,}+
至少出現n次,不回步。
{m次,n次}+
至少出現m次但不超過n次,不回步。
(?>比對樣式) 單體組 Atomic group
不回步,整個比對出來樣文段,在回步時會被視做一個單體,不可以部分被丟棄。例如(?>[abc]+\w\w)可比對出abcabcdd,但比對abcaabbcc會造成失敗,因為abcaabbcc已經被當成「一體」的。
呼~最後來談一下註解還有模式飾詞吧
模式飾詞 Mode modifier (或稱flag)
modifier是用來告訴正規式引擎對於正規表示式的解釋方式。
i
不區分大小寫
m
多列模式,「^」及「$」在此模式下表示\n的相鄰字元
s
單列模式,「.」代表任何字元,包括\n
x
忽略空白字元,容許樣式中出現註解「#···」
U
反轉量詞的貪多性質,「*」變不貪多;而「*?」則變貪多
A
強制從受測字串的起點開始比對
D
強制「$」代表字串結尾,而非\n前的字元,但若有開啟多行模式m則以多行模式為主
u
將正規式與受測字串皆當作UTF-8字元處理
(?mode)
以指定模式來比對後續字串,如(?i)接下來比對不分大小寫
(?-mode)
取消模式,(?i)接下來比對不分大小寫(?-i)接下來回復分大小寫
(?mode:···)
以指定的模式來比對括弧內的樣式
(?-mode:···)
取消模式對括弧內的樣式的影響
\Q······\E
將\Q及\E 之間的特殊字元視作一般字元
(?#···)
括弧內的字串視作註解
#······
在x模式下,#後到列尾的字串都當作是註解
繼續閱讀:
http://perldoc.perl.org/perlre.html
2010年12月8日 星期三
2010年12月6日 星期一
Sub-pattern Matching in Javascript
I am getting:
result[0] = "<eval>content1</eval>";
result[1] = "<eval>content2</eval>";
I was expecting
result[0] = "content1";
result[1] = "content2";
any suggestion?
Simplest solution is to use the exec method on the RegExp object. e.g.
var str = "<eval>content1</eval>\n<eval>content2</eval>";
var pattern = /<.+>(.*)<\/.+>/mg;
var match;
while ((match = pattern.exec(str)))
{
alert(match[1]);
}
http://markmail.org/message/tlorcsxipkhmjo4z#query:+page:1+mid:w44kinhyc2fs4y2y+state:results
Sub-pattern Matching in Javascript
I am getting:
result[0] = "<eval>content1</eval>";
result[1] = "<eval>content2</eval>";
I was expecting
result[0] = "content1";
result[1] = "content2";
any suggestion?
Simplest solution is to use the exec method on the RegExp object. e.g.
var str = "<eval>content1</eval>\n<eval>content2</eval>";
var pattern = /<.+>(.*)<\/.+>/mg;
var match;
while ((match = pattern.exec(str)))
{
alert(match[1]);
}
http://markmail.org/message/tlorcsxipkhmjo4z#query:+page:1+mid:w44kinhyc2fs4y2y+state:results
2010年12月5日 星期日
2010年12月2日 星期四
36進位 與 toString(36)
還真的有 36 進位 XDDD
<script type="text/javascript">
var t = 36 35;
alert(t.toString(36));
</script>
36進位 與 toString(36)
還真的有 36 進位 XDDD
<script type="text/javascript">
var t = 36 35;
alert(t.toString(36));
</script>