麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Regex > 正文

正則表達式中/w不能識別中文

2020-03-16 21:15:54
字體:
來源:轉載
供稿:網友

昨天在CentOS 5.2 boost::regex庫上,測試的網上來的一段代碼時 (//w*)死活不能匹配中文 參考了下邊連接里的內容

正則表達式用于字符串處理,表單驗證等場合,實用高效,但用到時總是不太把握,以致往往要上網查一番。我將一些常用的表達式收藏在這里,作備忘之用。本貼隨時會更新。

匹配中文字符的正則表達式: [/u4e00-/u9fa5]

匹配雙字節字符(包括漢字在內):[^/x00-/xff]

應用:計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

String.prototype.len=function(){return this.replace([^/x00-/xff]/g,"aa").length;}

匹配空行的正則表達式:/n[/s| ]*/r

匹配HTML標記的正則表達式:/<(.*)>.*<///1>|<(.*) //>/

匹配首尾空格的正則表達式:(^/s*)|(/s*$)

String.prototype.trim = function()

{

return this.replace(/(^/s*)|(/s*$)/g, "");

}

利用正則表達式分解和轉換IP地址:

下面是利用正則表達式匹配IP地址,并將IP地址轉換成對應數值的Javascript程序:

function IP2V(ip)

{

re=/(/d+)/.(/d+)/.(/d+)/.(/d+)/g //匹配IP地址的正則表達式

if(re.test(ip))

{

return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1

}

else

{

throw new Error("Not a valid IP address!")

}

}

不過上面的程序如果不用正則表達式,而直接用split函數來分解可能更簡單,程序如下:

var ip="10.100.20.168"

ip=ip.split(".")

alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

匹配Email地址的正則表達式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*

匹配網址URL的正則表達式:http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?

利用正則表達式去除字串中重復的字符的算法程序:[注:此程序不正確,原因見本貼回復]

var s="abacabefgeeii"

var s1=s.replace(/(.).*/1/g,"$1")

var re=new RegExp("["+s1+"]","g")

var s2=s.replace(re,"")

alert(s1+s2) //結果為:abcefgi

我原來在CSDN上發貼尋求一個表達式來實現去除重復字符的方法,最終沒有找到,這是我能想到的最簡單的實現方法。思路是使用后向引用取出包括重復的字符,再以重復的字符建立第二個表達式,取到不重復的字符,兩者串連。這個方法對于字符順序有要求的字符串可能不適用。

得用正則表達式從URL地址中提取文件名的javascript程序,如下結果為page1

s="http://www.9499.net/page1.htm"

s=s.replace(/(.*//){0,}([^/.]+).*/ig,"$2")

alert(s)

利用正則表達式限制網頁表單里的文本框輸入內容:

用正則表達式限制只能輸入中文:onkeyup="value=value.replace(/[^/u4E00-/u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/u4E00-/u9FA5]/g,''))"

用正則表達式限制只能輸入全角字符: onkeyup="value=value.replace(/[^/uFF00-/uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/uFF00-/uFFFF]/g,''))"

用正則表達式限制只能輸入數字:onkeyup="value=value.replace(/[^/d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"

用正則表達式限制只能輸入數字和英文:onkeyup="value=value.replace(/[/W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"

------------------------------------------

另外從baidu 的知道里邊拿到些信息:

正則表達式的構造摘要

構造 匹配

字符

x 字符 x

// 反斜線字符

/0n 帶有八進制值 0 的字符 n (0 <= n <= 7)

/0nn 帶有八進制值 0 的字符 nn (0 <= n <= 7)

/0mnn 帶有八進制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)

/xhh 帶有十六進制值 0x 的字符 hh

/uhhhh 帶有十六進制值 0x 的字符 hhhh

/t 制表符 ('/u0009')

/n 新行(換行)符 ('/u000A')

/r 回車符 ('/u000D')

/f 換頁符 ('/u000C')

/a 報警 (bell) 符 ('/u0007')

/e 轉義符 ('/u001B')

/cx 對應于 x 的控制符

字符類

[abc] a、b 或 c(簡單類)

[^abc] 任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(范圍)

[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]] d、e 或 f(交集)

[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)

[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)

預定義字符類

. 任何字符(與行結束符可能匹配也可能不匹配)

/d 數字:[0-9]

/D 非數字: [^0-9]

/s 空白字符:[ /t/n/x0B/f/r]

/S 非空白字符:[^/s]

/w 單詞字符:[a-zA-Z_0-9]

/W 非單詞字符:[^/w]

POSIX 字符類(僅 US-ASCII)

/p{Lower} 小寫字母字符:[a-z]

/p{Upper} 大寫字母字符:[A-Z]

/p{ASCII} 所有 ASCII:[/x00-/x7F]

/p{Alpha} 字母字符:[/p{Lower}/p{Upper}]

/p{Digit} 十進制數字:[0-9]

/p{Alnum} 字母數字字符:[/p{Alpha}/p{Digit}]

/p{Punct} 標點符號:!"#$%&'()*+,-./:;<=>?@[/]^_`{|}~

/p{Graph} 可見字符:[/p{Alnum}/p{Punct}]

/p{Print} 可打印字符:[/p{Graph}/x20]

/p{Blank} 空格或制表符:[ /t]

/p{Cntrl} 控制字符:[/x00-/x1F/x7F]

/p{XDigit} 十六進制數字:[0-9a-fA-F]

/p{Space} 空白字符:[ /t/n/x0B/f/r]

java.lang.Character 類(簡單的 java 字符類型)

/p{javaLowerCase} 等效于 java.lang.Character.isLowerCase()

/p{javaUpperCase} 等效于 java.lang.Character.isUpperCase()

/p{javaWhitespace} 等效于 java.lang.Character.isWhitespace()

/p{javaMirrored} 等效于 java.lang.Character.isMirrored()

Unicode 塊和類別的類

/p{InGreek} Greek 塊(簡單塊)中的字符

/p{Lu} 大寫字母(簡單類別)

/p{Sc} 貨幣符號

/P{InGreek} 所有字符,Greek 塊中的除外(否定)

[/p{L}&&[^/p{Lu}]] 所有字母,大寫字母除外(減去)

邊界匹配器

^ 行的開頭

$ 行的結尾

/b 單詞邊界

/B 非單詞邊界

/A 輸入的開頭

/G 上一個匹配的結尾

/Z 輸入的結尾,僅用于最后的結束符(如果有的話)

/z 輸入的結尾

Greedy 數量詞

X? X,一次或一次也沒有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

X{n,m} X,至少 n 次,但是不超過 m 次

Reluctant 數量詞

X?? X,一次或一次也沒有

X*? X,零次或多次

X+? X,一次或多次

X{n}? X,恰好 n 次

X{n,}? X,至少 n 次

X{n,m}? X,至少 n 次,但是不超過 m 次

Possessive 數量詞

X?+ X,一次或一次也沒有

X*+ X,零次或多次

X++ X,一次或多次

X{n}+ X,恰好 n 次

X{n,}+ X,至少 n 次

X{n,m}+ X,至少 n 次,但是不超過 m 次

Logical 運算符

XY X 后跟 Y

X|Y X 或 Y

(X) X,作為捕獲組

Back 引用

/n 任何匹配的 nth 捕獲組

引用

/ Nothing,但是引用以下字符

/Q Nothing,但是引用所有字符,直到 /E

/E Nothing,但是結束從 /Q 開始的引用

特殊構造(非捕獲)

(?:X) X,作為非捕獲組

(?idmsux-idmsux) Nothing,但是將匹配標志由 on 轉為 off

(?idmsux-idmsux:X) X,作為帶有給定標志 on - off 的非捕獲組

(?=X) X,通過零寬度的正 lookahead

(?!X) X,通過零寬度的負 lookahead

(?<=X) X,通過零寬度的正 lookbehind

(?

(?>X) X,作為獨立的非捕獲組

--------------------------------------------------------------------------------

反斜線、轉義和引用

反斜線字符 ('/') 用于引用轉義構造,如上表所定義的,同時還用于引用其他將被解釋為非轉義構造的字符。因此,表達式 // 與單個反斜線匹配,而 /{ 與左括號匹配。

在不表示轉義構造的任何字母字符前使用反斜線都是錯誤的;它們是為將來擴展正則表達式語言保留的。可以在非字母字符前使用反斜線,不管該字符是否非轉義構造的一部分。

根據 Java Language Specification 的要求,Java 源代碼的字符串中的反斜線被解釋為 Unicode 轉義或其他字符轉義。因此必須在字符串字面值中使用兩個反斜線,表示正則表達式受到保護,不被 Java 字節碼編譯器解釋。例如,當解釋為正則表達式時,字符串字面值 "/b" 與單個退格字符匹配,而 "//b" 與單詞邊界匹配。字符串字面值 "/(hello/)" 是非法的,將導致編譯時錯誤;要與字符串 (hello) 匹配,必須使用字符串字面值 "//(hello//)"。

字符類

字符類可以出現在其他字符類中,并且可以包含并集運算符(隱式)和交集運算符 (&&)。并集運算符表示至少包含其某個操作數類中所有字符的類。交集運算符表示包含同時位于其兩個操作數類中所有字符的類。

字符類運算符的優先級如下所示,按從最高到最低的順序排列:

1 字面值轉義 /x

2 分組 [...]

3 范圍 a-z

4 并集 [a-e][i-u]

5 交集 [a-z&&[aeiou]]

注意,元字符的不同集合實際上位于字符類的內部,而非字符類的外部。例如,正則表達式 . 在字符類內部就失去了其特殊意義,而表達式 - 變成了形成元字符的范圍。

行結束符

行結束符 是一個或兩個字符的序列,標記輸入字符序列的行結尾。以下代碼被識別為行結束符:

新行(換行)符 ('/n')、

后面緊跟新行符的回車符 ("/r/n")、

單獨的回車符 ('/r')、

下一行字符 ('/u0085')、

行分隔符 ('/u2028') 或

段落分隔符 ('/u2029)。

如果激活 UNIX_LINES 模式,則新行符是惟一識別的行結束符。

如果未指定 DOTALL 標志,則正則表達式 . 可以與任何字符(行結束符除外)匹配。

默認情況下,正則表達式 ^ 和 $ 忽略行結束符,僅分別與整個輸入序列的開頭和結尾匹配。如果激活 MULTILINE 模式,則 ^ 在輸入的開頭和行結束符之后(輸入的結尾)才發生匹配。處于 MULTILINE 模式中時,$ 僅在行結束符之前或輸入序列的結尾處匹配。

組和捕獲

捕獲組可以通過從左到右計算其開括號來編號。例如,在表達式 ((A)(B(C))) 中,存在四個這樣的組:

1 ((A)(B(C)))

2 /A

3 (B(C))

4 (C)

組零始終代表整個表達式。

之所以這樣命名捕獲組是因為在匹配中,保存了與這些組匹配的輸入序列的每個子序列。捕獲的子序列稍后可以通過 Back 引用在表達式中使用,也可以在匹配操作完成后從匹配器檢索。

與組關聯的捕獲輸入始終是與組最近匹配的子序列。如果由于量化的緣故再次計算了組,則在第二次計算失敗時將保留其以前捕獲的值(如果有的話)例如,將字符串 "aba" 與表達式 (a(b)?)+ 相匹配,會將第二組設置為 "b"。在每個匹配的開頭,所有捕獲的輸入都會被丟棄。

以 (?) 開頭的組是純的非捕獲 組,它不捕獲文本,也不針對組合計進行計數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费一级特黄毛片 | 久草在线视频福利 | 在线99热 | 宅男噜噜噜66国产在线观看 | 91九色网址 | 久久亚洲精品国产一区 | 欧美日韩手机在线观看 | 亚洲午夜一区二区三区 | 男男啪羞羞视频网站 | 手机黄色小视频 | 午夜影院在线免费观看 | 色淫视频 | 狠狠操视频网站 | 4399一级成人毛片 | 久久久久久久久久久影视 | 毛片在线视频免费观看 | 免费网站看毛片 | 日韩视频在线不卡 | 成人免费在线播放 | 成年人国产视频 | 久久精品亚洲一区二区 | 亚洲男人的天堂在线视频 | 国产精品欧美久久久久一区二区 | 久久成年人视频 | 精品一区二区三区免费 | 无遮挡一级毛片视频 | 久久成人精品视频 | ⅴideo裸体秀hd | 亚洲欧美日韩免费 | 日本中文字幕网址 | 国产亚洲精品视频中文字幕 | 最新av网址在线观看 | chinesehd天美原创xxxx | 国产一区二区亚洲 | 91精品国产福利尤物免费 | 最新欧美精品一区二区三区 | 日本一道aⅴ不卡免费播放 视屏一区 | 免费看成年人网站 | 免费在线观看成人av | 中文字幕精品在线视频 | 激情大乳女做爰办公室韩国 |