国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Regex > 正文

正則表達(dá)式中/w不能識(shí)別中文

2020-03-16 21:15:54
字體:
供稿:網(wǎng)友

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

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

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

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

應(yīng)用:計(jì)算字符串的長(zhǎng)度(一個(gè)雙字節(jié)字符長(zhǎng)度計(jì)2,ASCII字符計(jì)1)

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

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

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

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

String.prototype.trim = function()

{

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

}

利用正則表達(dá)式分解和轉(zhuǎn)換IP地址:

下面是利用正則表達(dá)式匹配IP地址,并將IP地址轉(zhuǎn)換成對(duì)應(yīng)數(shù)值的Javascript程序:

function IP2V(ip)

{

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

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!")

}

}

不過上面的程序如果不用正則表達(dá)式,而直接用split函數(shù)來分解可能更簡(jiǎn)單,程序如下:

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地址的正則表達(dá)式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*

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

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

var s="abacabefgeeii"

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

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

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

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

我原來在CSDN上發(fā)貼尋求一個(gè)表達(dá)式來實(shí)現(xiàn)去除重復(fù)字符的方法,最終沒有找到,這是我能想到的最簡(jiǎn)單的實(shí)現(xiàn)方法。思路是使用后向引用取出包括重復(fù)的字符,再以重復(fù)的字符建立第二個(gè)表達(dá)式,取到不重復(fù)的字符,兩者串連。這個(gè)方法對(duì)于字符順序有要求的字符串可能不適用。

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

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

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

alert(s)

利用正則表達(dá)式限制網(wǎng)頁(yè)表單里的文本框輸入內(nèi)容:

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

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

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

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

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

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

正則表達(dá)式的構(gòu)造摘要

構(gòu)造 匹配

字符

x 字符 x

// 反斜線字符

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

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

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

/xhh 帶有十六進(jìn)制值 0x 的字符 hh

/uhhhh 帶有十六進(jìn)制值 0x 的字符 hhhh

/t 制表符 ('/u0009')

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

/r 回車符 ('/u000D')

/f 換頁(yè)符 ('/u000C')

/a 報(bào)警 (bell) 符 ('/u0007')

/e 轉(zhuǎn)義符 ('/u001B')

/cx 對(duì)應(yīng)于 x 的控制符

字符類

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

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

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

[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](減去)

預(yù)定義字符類

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

/d 數(shù)字:[0-9]

/D 非數(shù)字: [^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} 十進(jìn)制數(shù)字:[0-9]

/p{Alnum} 字母數(shù)字字符:[/p{Alpha}/p{Digit}]

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

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

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

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

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

/p{XDigit} 十六進(jìn)制數(shù)字:[0-9a-fA-F]

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

java.lang.Character 類(簡(jiǎn)單的 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 塊(簡(jiǎn)單塊)中的字符

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

/p{Sc} 貨幣符號(hào)

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

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

邊界匹配器

^ 行的開頭

$ 行的結(jié)尾

/b 單詞邊界

/B 非單詞邊界

/A 輸入的開頭

/G 上一個(gè)匹配的結(jié)尾

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

/z 輸入的結(jié)尾

Greedy 數(shù)量詞

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

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

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

Reluctant 數(shù)量詞

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

X*? X,零次或多次

X+? X,一次或多次

X{n}? X,恰好 n 次

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

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

Possessive 數(shù)量詞

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

X*+ X,零次或多次

X++ X,一次或多次

X{n}+ X,恰好 n 次

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

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

Logical 運(yùn)算符

XY X 后跟 Y

X|Y X 或 Y

(X) X,作為捕獲組

Back 引用

/n 任何匹配的 nth 捕獲組

引用

/ Nothing,但是引用以下字符

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

/E Nothing,但是結(jié)束從 /Q 開始的引用

特殊構(gòu)造(非捕獲)

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

(?idmsux-idmsux) Nothing,但是將匹配標(biāo)志由 on 轉(zhuǎn)為 off

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

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

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

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

(?

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

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

反斜線、轉(zhuǎn)義和引用

反斜線字符 ('/') 用于引用轉(zhuǎn)義構(gòu)造,如上表所定義的,同時(shí)還用于引用其他將被解釋為非轉(zhuǎn)義構(gòu)造的字符。因此,表達(dá)式 // 與單個(gè)反斜線匹配,而 /{ 與左括號(hào)匹配。

在不表示轉(zhuǎn)義構(gòu)造的任何字母字符前使用反斜線都是錯(cuò)誤的;它們是為將來擴(kuò)展正則表達(dá)式語(yǔ)言保留的。可以在非字母字符前使用反斜線,不管該字符是否非轉(zhuǎn)義構(gòu)造的一部分。

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

字符類

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

字符類運(yùn)算符的優(yōu)先級(jí)如下所示,按從最高到最低的順序排列:

1 字面值轉(zhuǎn)義 /x

2 分組 [...]

3 范圍 a-z

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

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

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

行結(jié)束符

行結(jié)束符 是一個(gè)或兩個(gè)字符的序列,標(biāo)記輸入字符序列的行結(jié)尾。以下代碼被識(shí)別為行結(jié)束符:

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

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

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

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

行分隔符 ('/u2028') 或

段落分隔符 ('/u2029)。

如果激活 UNIX_LINES 模式,則新行符是惟一識(shí)別的行結(jié)束符。

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

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

組和捕獲

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

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

2 /A

3 (B(C))

4 (C)

組零始終代表整個(gè)表達(dá)式。

之所以這樣命名捕獲組是因?yàn)樵谄ヅ渲校4媪伺c這些組匹配的輸入序列的每個(gè)子序列。捕獲的子序列稍后可以通過 Back 引用在表達(dá)式中使用,也可以在匹配操作完成后從匹配器檢索。

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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐都县| 额尔古纳市| 垣曲县| 北川| 日土县| 福安市| 收藏| 湄潭县| 云安县| 边坝县| 微博| 广昌县| 巫溪县| 日土县| 吴桥县| 嘉兴市| 桦川县| 正定县| 吉木萨尔县| 鄂托克前旗| 彭州市| 余姚市| 丰城市| 高青县| 盐亭县| 大方县| 永嘉县| 民县| 额敏县| 黑山县| 璧山县| 垦利县| 扬中市| 通州市| 颍上县| 辽宁省| 方山县| 拉萨市| 嘉禾县| 洛南县| 连平县|