php 正則表達式(Regular Expression)用法

文章收藏了關于php 正則表達式用法與常用的正則表達式規則與實例,有需要的同學可以參考一下本文章。

正則表達式(Regular Expression)

正則表達式系統:

  1.POSIX

  2.Perl

PHP中使用的regex是PCRE:

  NOTE:PCRE(Perl兼容正則表達式,Perl Compatible Regular Expressions)

PCRE語法:

  1.定界符

    必須成對出現,可以使用除0-9a-zA-Z以外的任何字符

  2.原子

    1.正則需要匹配的可見和不可見字符都是原子

    2.一個正則表達式最少含有一個原子

    3.當需要匹配諸如"("、"["、"^"等含有語義的符號時需要用""反斜線進行轉義

    原子字符:

      f 匹配換頁符

      n 匹配換行符

      r 匹配回車符

      t 匹配制表符

      v 匹配垂直制表符

  3.元字符

     轉義字符

    ^ 匹配字符串起始處

    $ 匹配字符串末尾

    . 匹配除"n"之外的任何單個字符

    * 匹配前面的子表達式0或多次

    + 匹配前面的子表達式1次或多次

    ? 匹配前面的子表達式0次或1次

    {n} 匹配n次

    {n,} 匹配n次或n次以上

    {n,m} 最少匹配n次至多匹配m次,(n<=m)

    [] 中括號代表原子表,中間的原子地位都是相等。在匹配的時候,匹配表中的任意一個字符

    [^] 抑揚符,排除後面的原子表所包含的字符。

    (pattern) 匹配pattern並獲取這一匹配。

    num 對獲取的第num個匹配的引用。


    (?:pattern) 匹配pattern但不獲取這一匹配

    (?=pattern) 正向肯定預查,非獲取匹配,例如:windows(?=XP|7)能匹配windowsXP中的windows不能匹配windows98中的windows

    (?!=pattern) 正向否定欲查非獲取匹配,例如:windows(?!98|2000),能匹配windowsXP中的windows,不能匹配windows98中的windows

    (?<=pattern) 反向肯定預查,非獲取匹配。例如:(?<=My|Postgre)SQL能匹配MySQL中的SQL,不能匹配MSSQL中的SQL

    (?<!pattern) 反向否定預查,非獲取匹配。例如:(?<!My|Postgre)SQL能匹配MSSQL中的SQL,不能匹配MySQL中的SQL

    b 匹配單詞邊界

    B 匹配除單詞邊界以外的字符

    

    d 匹配任何一個數字。等價于[0-9]

    D 匹配任何一個非數字以外的字符。等價于[^0-9]

    s 匹配任何一個空白字符(包括空格、制表符、換頁符等)。等價于[fnrtv]

    S 匹配任何一個非空白字符。等價于[^fnrtv]

    

    w 匹配任何一個數字、字母或下劃線。等價于[0-9a-zA-Z]

    W 匹配任何一個非數字、字母或下劃線的字符。等價于[^0-9a-zA-Z]

4.模式修正符

  i 不區分大小寫

  m 此模式中如果有回車或換行,^和$將匹配每行的行首和行尾

  s 讓.能匹配n

  x 忽略空白

  U 取消貪婪,相當于(.*?)

  A 與^效果一樣

  D 結尾處不忽略回車 ,在結束處有$符的時候,在匹配的字符串後面加上回車,$依然能夠匹配它成功。但是加上D之後,結尾的回車,不再匹配

  NOTE:正則表達式是從左向右進行匹配的

 常用的正則表達式
1、非負整數:”^d+$”

2、正整數:”^[0-9]*[1-9][0-9]*$”

3、非正整數:”^((-d+)|(0+))$”

4、負整數:”^-[0-9]*[1-9][0-9]*$”

5、整數:”^-?d+$”

6、非負浮點數:”^d+(.d+)?$”

7、正浮點數:”^((0-9)+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$”

8、非正浮點數:”^((-d+.d+)?)|(0+(.0+)?))$”

9、負浮點數:”^(-((正浮點數正則式)))$”

10、英文字符串:”^[A-Za-z]+$”

11、英文大寫串:”^[A-Z]+$”

12、英文小寫串:”^[a-z]+$”

13、英文字符數字串:”^[A-Za-z0-9]+$”

14、英數字加下劃線串:”^w+$”

15、E-mail地址:”^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$”

16、URL:”^[a-zA-Z]+://(w+(-w+)*)(.(w+(-w+)*))*(?s*)?$”


下面這個用PHP寫的函數,可以獲取任意的字符串$string中的所有鏈接地址($string可以是從一個HTML頁面文件直接讀取出來的字符串),結果保存在一個數組中返回.該函數自動把電子郵件地址排除在外,而且返回的數組中不會有重複元素.

代碼如下

function GetAllLink($string)
{
$string = str_replace("r","",$string);
$string = str_replace("n","",$string);

$regex[url] = "((http|https|ftp|telnet|news)://)?([a-z0-9_-/.]+.[][a-z0-9:;&#@=_~%?/.,+-]+)";
$regex[email] = "([a-z0-9_-]+)@([a-z0-9_-]+.[a-z0-9-._-]+)";

//去掉標簽之間的文字
$string = eregi_replace(">[^<>]+<","><", $string);

//去掉JAVASCRIPT代碼
$string = eregi_replace("<!--.*//-->","", $string);

//去掉非<a>的HTML標簽

代碼如下

$string = eregi_replace("<[^a][^<>]*>","", $string);

//去掉EMAIL鏈接
$string = eregi_replace("<a([ ]+)href=(["']*)mailto:($regex[email])(["']*)[^>]*>","", $string);

//替換需要的網頁鏈接
$string = eregi_replace("<a([ ]+)href=(["']*)($regex[url])(["']*)[^>]*>","\3t", $string);

$output[0] = strtok($string, "t");
while(($temp = strtok("t")))
{
if($temp && !in_array($temp, $output))
$output[++$i] = $temp;
}

return $output;
}


以下是以PHP的語法所寫的示例
驗證字符串是否只含數字與英文,字符串長度並在4~16個字符之間

代碼如下

<?php
$str = 'a1234';
if (preg_match("^[a-zA-Z0-9]{4,16}$", $str)) {
echo "驗證成功";} else {
echo "驗證失??quot;;}?>

簡易的台灣身分證字號驗證

代碼如下

<?php
$str = 'a1234';
if (preg_match("^(?:d{15}|d{18})$", $str)) {
echo "驗證成功";
} else {
echo "驗證失??quot;;}
?>


下面的代碼實現文字中的代碼塊,功能就如你在腳本之家看到的代碼一樣。

代碼如下

function codedisp($code) {
global $discuzcodes;
$discuzcodes['pcodecount']++;
$code = htmlspecialchars(str_replace('\"', '"', preg_replace("/^[nr]*(.+?)[nr]*$/is", "\1", $code)));
$discuzcodes['codehtml'][$discuzcodes['pcodecount']] = "<br><div class="msgheader"><div class="right"><a href="###" class="smalltxt" onclick="copycode($('phpcode$discuzcodes[codecount]'));">[複制此代碼]</a></div>代碼如下:</div><div class="msgborder" id="phpcode$discuzcodes[codecount]">".fhtml2($code)."</div><br>";
$discuzcodes['codecount']++;
return "[tDISCUZ_CODE_$discuzcodes[pcodecount]t]";
}
$message = preg_replace("/s*[code](.+?)[/code]s*/ies", "codedisp('\1')", $message);
$message = preg_replace("/s*[html](.+?)[/html]s*/ies", "htmldisp('\1')", $message);

更多相關文章
  • 可能很多朋友在使用replace時只是簡單的替換字符了,replace不但可以替換字符還可以直接在裏面使用正則表達式來替換了,下面我們一起來看看具體一些關于replace正則替換字符的用法吧.mysql字段值替換具體做法如下: 代碼如下 update `table_hospital` set ser
  • php教程的正則表達式完全手冊前言 正則表達式是煩瑣的,但是強大的,學會之後的應用會讓你除了提高效率外,會給你帶來絕對的成就感.只要認真去閱讀這些資料,加上應用的時候進行一定的參考,掌握正則表達式不是問題.索引 1.
  • java 正則表達式之pattern類 matcher類
    本文章分享了關于java 正則表達式之pattern類 matcher類入門教程,有需要學
  • t-sql 正則表達式創建程序集 clrregexclass.cs,並使用 c:windowsmicrosoft.netframeworkv2.0.50727csc.exe /target:library clrre
  • Dreamweaver中使用正則表達式替換href中的內容
    可能在dw中使用正則表達式替換字符串的朋友很少,下面我來給大家介紹Dreamweaver中使用正則表達式替換href中的內容吧. 在Dreamweaver中使用正則表達式替換href中的內容,就像下面這些href中的內容複雜多樣的情況下,href="/html/u.html",h ...
  • 直接量語法/pattern/attributes創建 regexp 對象的語法: 代碼如下:var obj=new regexp(pattern,attributes);事例1: 代碼如下:var pattern=/
  • 下面給各位同學整理了一些關于php array數組的相關處理函數and str字符串處理與正則表達式,希望文章對你會有所幫助.數組的相關處理函數:1)數組的鍵值操作函數 array_values();//獲取數組中的值array_keys();//獲取數組中的鍵in_array();//檢查一個值是
  • 本文章來給大家介紹php 正則表達式 匹配以"XXX"開頭不能以"YYY"結尾,下面的實例我們以abc開頭與 首先來是abc開頭, 沒有想的就是 ^abc 以abc開頭了,不能以"xyz"結尾後面要有一串的字符串一般
一周排行
  • 在python中發送郵件我們可以使用smtp來進行發布,而smtp有普通版本的smtp發送及sll方式的方法,下面一起來看看Python中使用SMTP發送郵件的例子,具體如下所示.一,SMTP發送郵件這裏PYTHON ...
  • 本文章來給大家介紹我在使用mysql存儲過程中(創建,刪除,調用)的一些學習筆記,有需要學習存儲過程的同學可進入參考.一.創建存儲過程1.基本語法:create procedure sp_name()begin... ...
  • 本文章來給各位介紹在python中twisted實現異步采集的一個實現過程,希望此代碼能對各位需要的朋友帶來幫助.對于大量的數據采集除了多線程,就只有異步來實現了.本文是通過twisted框架來實現異步采集,Asyn
  • 正則表達式編寫神器 JGsoft RegexBuddy 教程
    JGsoft RegexBuddy 是一款正則表達式工具.容易創建完全符合你的要求的正則表
  • 本文章來給各位同學介紹一下挂機空調爲什麽在0度下外機結霜KFR-32W/WAA問題與問題的解決方法.現象描述:室外環境溫度0度以下時開啓制熱功能,幾小時後發現外機結霜.原因解釋:當空調工作于制熱模式時,室內機是制熱的
  • 在網上找了很多關于Tomcat中文亂碼的解決辦法,但是發現不能解決問題而且文章還是N長看了眼光還一堆費話了,下面我根據經驗總結一個方法非常不錯,解決簡單.因爲中文亂碼的問題忙活了一個下午,主要的問題在于通過get上傳
  • 下文給各位整理了一個關于asp.net中BeginInvoke和EndInvoke方法幾個例子,希望此例子能幫助到各位.BeginInvoke和EndInvoke的作用是把一個同步方法改成異步執行,改造過程主要有3步 ...
  • 301跳轉的意思就是永久重定向了,我們可以通過它保護網站權重了,下面一起來看看一個Nginx實現www域名的301跳轉的配置,非常的簡單希望對各位有幫助.之前,微魔曾經跟大家分享了多篇關于Nginx的教程文章(請以“
  • Debian安裝LNMPLinux/Nginx/MySQL/PHP環境的步驟
    我們在網上找一些安裝包中一鍵安裝包中apache的比較多,但像安裝LNMP是比較少了,下面
  • 本文章來給各位朋友詳細介紹關于WordPress文章ID不連續和關閉自動保存關閉解決辦法,有需要了解的朋友可參考參考.第一步:找到並打開 wp-config.php 文件,在 $table_prefix = 'wp_