熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

正則表達式在網絡編程中的運用

2022-06-13   來源: Java核心技術 

  [前言]在我們編寫WEB程序時經常會判斷一個字符串的有效性一個串是否是數字是否是有效的Email地址等等如果不使用
  
  正則表達式那麼判斷的程序會很長並且容易出錯如果使用正則表達式這些判斷就是一件很輕松的工作了本文全面介紹正則表達式的
  
  慨念格式並以在PHPASP中的應用實例增加讀者的感性認識正則表達式的應用很廣需要大家在學習和實踐中不斷的總結
  
  正則表達式簡介
  
  簡單的說正則表達式是一種可以用於模式匹配和替換的強有力的工具在網絡編程中應用廣泛如PHP腳本語言或是JavaScriptVBScript這樣的客戶端腳本語言都提供了對正則表達式的支持由此可見正則表達式已經超出了某種語言或某個系統的局限成為人們廣為接受的概念和功能
  
  正則表達式可以讓用戶通過使用一系列的特殊字符構建匹配模式然後把匹配模式與數據文件程序輸入以及WEB頁面的表單輸入等目標對象進行比較根據比較對象中是否包含匹配模式執行相應的程序
  
  舉例來說正則表達式的一個最為普遍的應用就是用於驗證用戶在線輸入的郵件地址的格式是否正確如果通過正則表達式驗證用戶郵件地址的格式正確用戶所填寫的表單信息將會被正常處理反之如果用戶輸入的郵件地址與正則表達的模式不匹配將會彈出提示信息要求用戶重新輸入正確的郵件地址由此可見正則表達式在WEB應用的邏輯判斷中具有舉足輕重的作用在後面我們會舉例詳細介紹正則表達式形式一般如/love/其中位於\/\定界符之間的部分就是將要在目標對象中進行匹配的模式用戶只要把希望查找匹配對象的模式內容放入\/\定界符之間即可為了能夠使用戶更加靈活的定制模式內容正則表達式提供了專門的\元字符\所謂元字符就是指那些在正則表達式中具有特殊意義的專用字符可以用來規定其前導字符(即位於元字符前面的字符)在目標對象中的出現模式較為常用的元字符包括 \+\*?以及{}\或者\\\s\\S\\d\\w和\\W\等等為了能夠方便用戶更加靈活的設定匹配模式正則表達式允許使用者在匹配模式中利用[]界定匹配於某一個范圍的字符而不局限於具體的字符
  
  除了我們以上的元字符之外正則表達式中還具有另外一種較為獨特的專用字符即定位符定位符用於規定匹配模式在目標對象中的出現位置較為常用的定位符包括 \^\ \$\ \\\b\ 以及 \\\B\
  
  如果我們希望在正則表達式中實現類似編程邏輯中的\或\運算在多個不同的模式中任選一個進行匹配的話可以使用管道符 \|\例如
  
  正則表達式中還有一個較為常用的運算符即否定符 \[ ^ ]\與我們前文所提到的定位符 \^\ 不同否定符 \[ ^ ]\規定目標對象中不能存在模式中所規定的字符串一般來說當\^\出現在 \[]\內時就被視做否定運算符而當\^\位於\[]\之外或沒有\[]\則應當被視做定位符
  
  最後當用戶需要在正則表達式的模式中加入元字符並查找其匹配對象時可以使用轉義符\\\\例如/Th\\*/該正則表達式將會與目
  
  標對象中的\Th*\而非\The\等相匹配
  
  正則表達式的語法規則和標記
  
  現在我們正式進入則表達式的學習我會根據實例結合講解正則表達式的用法看完後你就會覺得寫UBB代碼如此簡單了只要你一步一步的跟著我學 看完本文章後你就成為UBB高手了激動人心的就是你能寫出自已的UBB標簽來了再也不用到別人那裡去拷貝現成的代碼和模板了 還好VBScritp給我們提供了\正則表達式\對象只要你的服務器安裝了IEx就可以運行了
  
  字符描述
  
  ^符號匹配字符串的開頭例如
  
  ^abc 與\abc xyz\匹配而不與\xyz abc\匹配
  
  $符號匹配字符串的結尾例如
  
  abc$ 與\xyz abc\匹配而不與\abc xyz\匹配
  
  注意如果同時使用^符號和$符號將進行精確匹配例如
  
  ^abc$ 只與\abc\匹配
  
  *符號匹配個或多個前面的字符例如
  
  ab* 可以匹配\ab\\abb\\abbb\
  
  +符號匹配至少一個前面的字符例如
  
  ab+ 可以匹配\abb\\abbb\但不匹配\ab\
  
  ?符號匹配個或個前面的字符例如
  
  ab?c? 可以且只能匹配\abc\\abbc\\abcc\和\abbcc\
  
  符號匹配除換行符以外的任何字符例如
  
  ()+ 匹配除換行符以外的所有字符串
  
  x|y匹配\x\或\y\例如
  
  abc|xyz 可匹配 \abc\或 \xyz\而\ab(c|x)yz\匹配 \abcyz\和\abxyz\
  
  {n}匹配恰好n次(n為非負整數)前面的字符例如
  
  a{} 可以匹配\aa\但不匹配\a\
  
  {n}匹配至少n次(n為非負整數)前面的字符例如
  
  a{} 匹配\aaa\\aaaa\但不匹配\a\和\aa\
  
  注意a{}等價於a+
  
  a{}等價於a*
  
  {mn}匹配至少m個至多n個前面的字符例如
  
  a{} 只匹配\a\\aa\和\aaa\
  
  注意a{}等價於a?
  
  [xyz]表示一個字符集匹配括號中字符的其中之一例如
  
  [abc] 匹配\a\\b\和\c\
  
  [^xyz]表示一個否定的字符集匹配不在此括號中的任何字符例如
  
  [^abc] 可以匹配除\a\\b\和\c\之外的任何字符
  
  [az]表示某個范圍內的字符匹配指定區間內的任何字符例如
  
  [az] 匹配從\a\到\z\之間的任何一個小寫字母字符
  
  [^mn]表示某個范圍之外的字符匹配不在指定范圍內的字符例如
  
  [mn] 匹配除從\m\到\n\之間的任何字符
  
  \\符號是轉義操作符例如
  
  \\n 換行符
  
  \\f 分頁符
  
  \\r 回車
  
  \\t 制表符
  
  \\v 垂直制表符
  
  \\\\ 匹配\\\\
  
  \\/ 匹配\/\
  
  \\s 任何白字符包括空格制表符分頁符等等價於\[ \\f\\n\\r\\t\\v]\
  
  \\S 任何非空白的字符等價於\^\\f\\n\\r\\t\\v]\
  
  \\w 任何單詞字符包括字母和下劃線等價於\[AZaz_]\
  
  \\W 任何非單詞字符等價於\[^AZaz_]\
  
  \\b匹配單詞的結尾例如
  
  ve\\b 匹配單詞\love\但不匹配\very\\even\
  
  \\B匹配單詞的開頭例如
  
  ve\\B 匹配單詞\very\但不匹配\love\
  
  \\d匹配一個數字字符等價於[]例如
  
  abc\\dxyz 匹配\abcxyz\\abcxyz\但不匹配\abcaxyz\\abcxyz\
  
  \\D匹配一個非數字字符等價於[^]例如
  
  abc\\Dxyz 匹配\abcaxyz\\abcxyz\但不匹配\abcxyz\\abcxyz\
  
  \\NUM匹配NUM個(其中NUM為一個正整數)引用回到記住的匹配例如
  
  ()\\ 匹配兩個連續相同的字符
  
  \\oNUM匹配n(其中n為一個小於的八進制換碼值)例如
  
  \\o 匹配制表符
  
  \\xNUM匹配NUM(其中NUM為一個小於的十六進制換碼值)例如
  
  \\x 匹配字符\A\
  
  應用實例
  
  在對正則表達式有了較為全面的了解之後就可以在PerlPHP以及ASP等程式中使用正則表達式了
  
  下面以PHP語言為例使用驗證用戶在線輸入的郵件地址以及網址的格式是否正確PHP 提供了eregi()或ereg()資料處理函數實現字串比
  
  對剖析的模式匹配操作ereg()函數的使用格式如下
  
  ereg (pattern string)
  
  其中pattern代表正則表達式的模式而string則是執行查找替換操作的目標對象如Email地址值本函式以 pattern 的規則來剖析比
  
  對字串 string找到則傳回值為 true函式ereg()與eregi()的區別就是前者區分大小寫後者與大小寫無關使用PHP編寫的程序代碼如下
  
  <?php
  if (ereg(\^([az_])+@([azZ_])+(\\[az_])+[az]{}$\$email))
  { echo \您的 EMail 通過初步檢查!\;}
  else
  { echo \不是合法的EMail 地址請重新輸入!\;}
  ?>
  
  這個例子是可對使用者輸入的 EMail 作簡單的檢查檢查使用者的 EMail 字串是否有 @ 字元在 @ 字元前有小寫英文字母數字或下\_\在 @ 之後有數節字串最後的小數點後只能有二個或三個小寫英文字母如webm 就可以通過檢查而(出現大寫字母)和n(最後的小數點後只能超過個英文字母)就不能通過檢查
  
  我們通過調用自定義正規則判別函式也可以進行檢查操作如下面的網址檢驗函式:
  
  function VerifyWebSiteAddr ($strWebSiteAddr){
  return (eregi (\^([_az]+)+([az]+)+[az]{}$\ $strWebSiteAddr));
  }
  
  我們知道PHP程式的運行
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26005.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.