实用正则表达式(实用篇)
| 常用的元字符有 | |
| . | 匹配除換行符以外的任意字符 |
| \w? | 匹配字母或數字或下劃線或漢字 |
| \s? | 匹配任意的空白符 |
| \d | 匹配數字 |
| \b | 匹配單詞的開始或結束 |
| ^ | 匹配字符串的開始 |
| $ | 匹配字符串的結束 |
| 常用的限定符 | |
| * | 重復零次或更多次 |
| + | 重復一次或更多次 |
| ? | 重復零次或一次 |
| {n} | 重復n次 |
| {n,} | 重復n次或更多次 |
| {n,m} | 重復n到m次 |
| 常用的反義字符 | |
| \W | 匹配任意不是字母,數字,下劃線,漢字的字符 |
| \S | 匹配任意不是空白符的字符 |
| \D | 匹配任意非數字的字符 |
| \B | 匹配不是單詞開頭或結束的位置 |
| [^x] | 匹配除了x以外的任意字符 |
| 貪婪與懶惰限定符 | |
| *? | 重復任意次,但盡可能少重復 |
| +? | 重復1次或更多次,但盡可能少重復 |
| ?? | 重復0次或1次,但盡可能少重復 |
| {n,m}? | 重復n到m次,但盡可能少重復 |
| {n,}? | 重復n次以上,但盡可能少重復 |
| 使用小括號()時的一些特殊語法 | |
| (exp) | 匹配exp,并捕獲文本到自動命名的組里 |
| (?<name>exp)? | 匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp) |
| (?:exp) | 匹配exp,不捕獲匹配的文本,也不給此分組分配組號 |
| (?=exp) | 匹配exp前面的位置 |
| (?<=exp) | 匹配exp后面的位置 |
| (?!exp) | 匹配后面跟的不是exp的位置 |
| (?<!exp) | 匹配前面不是exp的位置 |
| (?#comment) | 這種類型的組不對正則表達式的處理產生任何影響,用于提供注釋讓人閱讀 |
| 一些不是很經常使用的字符 | |
| \a | 報警字符(打印它的效果是電腦嘀一聲) |
| \b? | 通常是單詞分界位置,但如果在字符類里使用代表退格 |
| \t | 制表符,Tab |
| \r | 回車 |
| \v | 豎向制表符 |
| \f | 換頁符 |
| \n | 換行符 |
| \e | Escape |
| \0nn | ASCII代碼中八進制代碼為nn的字符 |
| \xnn | ASCII代碼中十六進制代碼為nn的字符 |
| \unnnn | Unicode代碼中十六進制代碼為nnnn的字符 |
| \cN | ASCII控制字符。比如\cC代表Ctrl+C |
| \A | 字符串開頭(類似^,但不受處理多行選項的影響) |
| \Z | 字符串結尾或行尾(不受處理多行選項的影響) |
| \z | 字符串結尾(類似$,但不受處理多行選項的影響) |
| \G | 當前搜索的開頭 |
| \p{name} | Unicode中命名為name的字符類,例如\p{IsGreek} |
| (?>exp) | 貪婪子表達式 |
| (?<x>-<y>exp) | 平衡組 |
| (?im-nsx:exp) | 在子表達式exp中改變處理選項 |
| (?im-nsx) | 為表達式后面的部分改變處理選項 |
| (?(exp)yes|no) | 把exp當作零寬正向先行斷言,如果在這個位置能匹配,使用yes作為此組的表達式;否則使用no |
| (?(exp)yes) | 同上,只是使用空表達式作為no |
| (?(name)yes|no) | 如果命名為name的組捕獲到了內容,使用yes作為表達式;否則使用no |
| (?(name)yes) | 同上,只是使用空表達式作為no |
一些常用的正則表達式:
匹配中文字符的正則表達式: [\u4e00-\u9fa5]
匹配雙字節字符(包括漢字在內):[^\x00-\xff]
應用:計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)
匹配空行的正則表達式:\n[\s| ]*\r
匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正則表達式:(^\s*)|(\s*$)
利用正則表達式分解和轉換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- ./?%&=]*)?
用正則表達式限制只能輸入中文:
用正則表達式限制只能輸入全角字符:?
用正則表達式限制只能輸入數字:
用正則表達式限制只能輸入數字和英文:
^\d+$ //匹配非負整數(正整數 + 0)
^[0-9]*[1-9][0-9]*$ //匹配正整數
^((-\d+)|(0+))$ //匹配非正整數(負整數 + 0)
^-[0-9]*[1-9][0-9]*$ //匹配負整數
^-?\d+$ //匹配整數
^\d+(\.\d+)?$ //匹配非負浮點數(正浮點數 + 0)
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ //匹配正浮點數
^((-\d+(\.\d+)?)|(0+(\.0+)?))$ //匹配非正浮點數(負浮點數 + 0)
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ //匹配負浮點數
^(-?\d+)(\.\d+)?$ //匹配浮點數
^[A-Za-z]+$ //匹配由26個英文字母組成的字符串
^[A-Z]+$ //匹配由26個英文字母的大寫組成的字符串
^[a-z]+$ //匹配由26個英文字母的小寫組成的字符串
^[A-Za-z0-9]+$ //匹配由數字和26個英文字母組成的字符串
^\w+$ //匹配由數字、26個英文字母或者下劃線組成的字符串
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ //匹配email地址
^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ //匹配url
總結
以上是生活随笔為你收集整理的实用正则表达式(实用篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样得到select所有option里的
- 下一篇: linux下arp***的解决方案[转]