中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

posix與perl標準的正則表達式有什么區別

發布時間:2021-02-02 11:03:39 來源:億速云 閱讀:180 作者:小新 欄目:開發技術

這篇文章主要介紹了posix與perl標準的正則表達式有什么區別,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

正則表達式(Regular Expression,縮寫為regexp,regex或regxp),又稱正規表達式、正規表示式或常規表達式或正規化表示法或正規表示法,是指一個用 來描述或者匹配一系列符合某個句法規則的字符串的單個字符串。在很多文本編輯器或其他工具里,正則表達式通常被用來檢索和/或替換那些符合某個模式的文本 內容。許多程序設計語言都支持利用正則表達式進行字符串操作。例如,在Perl中就內建了一個功能強大的在正則表達式引擎。正則表達式這個概念最初是由 Unix中的工具軟件(例如sed和grep)普及開的。(摘自維基百科)

PHP同時使用兩套正則表達式規則,一套是由電氣和電子工程師 協會(IEEE)制定的POSIX Extended 1003.2兼容正則(事實上PHP對此標準的支持并不完善),另一套來自PCRE(Perl Compatible Regular Expression)庫提供PERL兼容正則,這是個開放源代碼的軟件,作者為 Philip Hazel。

使用POSIX兼容規則的函數有:
ereg_replace()
ereg()
eregi()
eregi_replace()
split()
spliti()
sql_regcase()
mb_ereg_match()
mb_ereg_replace()
mb_ereg_search_getpos()
mb_ereg_search_getregs()
mb_ereg_search_init()
mb_ereg_search_pos()
mb_ereg_search_regs()
mb_ereg_search_setpos()
mb_ereg_search()
mb_ereg()
mb_eregi_replace()
mb_eregi()
mb_regex_encoding()
mb_regex_set_options()
mb_split()

使用PERL兼容規則的函數有:
preg_grep()
preg_replace_callback()
preg_match_all()
preg_match()
preg_quote()
preg_split()
preg_replace()

定界符:

POSIX兼容正則沒有定界符,函數的相應參數會被認為是正則。

PERL兼容正則可以使用任何不是字母、數字或反斜線(\)的字符作為定界符,如果作為定界符的字符必須被用在表達式本身中,則需要用反斜線轉義。也可以使用(),{},[] 和 <> 作為定界符

修正符:

POSIX兼容正則沒有修正符。

PERL兼容正則中可能使用的修正符(修正符中的空格和換行被忽略,其它字符會導致錯誤):

i (PCRE_CASELESS):
匹配時忽略大小寫。

m(PCRE_MULTILINE):
當設定了此修正符,行起始(^)和行結束($)除了匹配整個字符串開頭和結束外,還分別匹配其中的換行符(\n)的之后和之前。

s(PCRE_DOTALL):
如果設定了此修正符,模式中的圓點元字符(.)匹配所有的字符,包括換行符。沒有此設定的話,則不包括換行符。

x(PCRE_EXTENDED):
如果設定了此修正符,模式中的空白字符除了被轉義的或在字符類中的以外完全被忽略。

e:
如果設定了此修正符,preg_replace() 在替換字符串中對逆向引用作正常的替換,將其作為 PHP 代碼求值,并用其結果來替換所搜索的字符串。 只有 preg_replace() 使用此修正符,其它 PCRE 函數將忽略之。

A(PCRE_ANCHORED):
如果設定了此修正符,模式被強制為“anchored”,即強制僅從目標字符串的開頭開始匹配。

D(PCRE_DOLLAR_ENDONLY):
如果設定了此修正符,模式中的行結束($)僅匹配目標字符串的結尾。沒有此選項時,如果最后一個字符是換行符的話,也會被匹配在里面。如果設定了 m 修正符則忽略此選項。

S:
當一個模式將被使用若干次時,為加速匹配起見值得先對其進行分析。如果設定了此修正符則會進行額外的分析。目前,分析一個模式僅對沒有單一固定起始字符的 non-anchored 模式有用。

U(PCRE_UNGREEDY):
使“?”的默認匹配成為貪婪狀態的。

X(PCRE_EXTRA):
模式中的任何反斜線后面跟上一個沒有特殊意義的字母導致一個錯誤,從而保留此組合以備將來擴充。默認情況下,一個反斜線后面跟一個沒有特殊意義的字母被當成該字母本身。

u(PCRE_UTF8):
模式字符串被當成UTF-8。

邏輯區隔:
POSIX兼容正則和PERL兼容正則的邏輯區隔符號作用和使用方法完全一致:
[]:包含任選一操作的相關信息。
{}:包含匹配次數的相關信息。
():包含一個邏輯區間的相關信息,可被用來進行引用操作。
|:表示“或”,[ab]和a|b是等價的。

元字符與“[]”相關:

有兩組不同的元字符:一種是模式中除了方括號內都能被識別的,還有一種是在方括號“[]”內被識別的。

POSIX兼容正則和PERL兼容正則“[]之外”“一致”的元字符:
\ 有數種用途的通用轉義符
^ 匹配字符串的開頭
$ 匹配字符串的結尾
? 匹配0或者1
* 匹配 0 個或多個前面指定類型的字符
+ 匹配 1 個或多個前面指定類型的字符

POSIX兼容正則和PERL兼容正則“[]之外”“不一致”的元字符:
. PERL兼容正則匹配除了換行符外的任意一個字符
. POSIX兼容正則匹配任意一個字符

POSIX兼容正則和PERL兼容正則“[]之內”“一致”的元字符:
\ 有數種用途的通用轉義符
^ 取反字符,但僅當其為第一個字符時有效
- 指定字符ASCII范圍,仔細研究ASCII碼,你會發現[W-c]等價于[WXYZ\\^_`abc]

POSIX兼容正則和PERL兼容正則“[]之內”“不一致”的元字符:
- POSIX兼容正則中[a-c-e]的指定會拋出錯誤。
- PERL兼容正則中[a-c-e]的指定等價于[a-e]。

匹配次數與“{}”相關:
POSIX兼容正則和PERL兼容正則在匹配次數方面完全一致:
{2}:表示匹配前面的字符2次
{2,}:表示匹配前面的字符2次或多次,默認都是貪婪(盡可能多)的匹配
{2,4}:表示匹配前面的字符2次或4次

邏輯區間與“()”相關:
使用()包含起來的區域是一個邏輯區間,邏輯區間的主要作用是體現出一些字符出現的邏輯次序,另一個用處就是可以用來引用(可以將此區間內的值引用給一個變量)。后一個作用比較奇特:
<?php
$str = "http://www.163.com/";
// POSIX兼容正則:
echo ereg_replace("(.+)","<a href = \\1 >\\1</a>",$str);
// PERL兼容正則:
echo preg_replace("/(.+)/","<a href = $1 >$1</a>",$str);
// 顯示兩個鏈接
?>

在引用的時候,括號是可以嵌套的,邏輯次序是按照“(”出現的次序來標定的。

類型匹配:
POSIX兼容正則:
[:upper:]:匹配所有的大寫字母
[:lower:]:匹配所有的小寫字母
[:alpha:]:匹配所有的字母
[:alnum:]:匹配所有的字母和數字
[:digit:]:匹配所有的數字
[:xdigit:]:匹配所有的十六進制字符,等價于[0-9A-Fa-f]
[:punct:]:匹配所有的標點符號,等價于 [.,"'?!;:]
[:blank:]:匹配空格和TAB,等價于[ \t]
[:space:]:匹配所有的空白字符,等價于[ \t\n\r\f\v]
[:cntrl:]:匹配所有ASCII 0到31之間的控制符。
[:graph:]:匹配所有的可打印字符,等價于:[^ \t\n\r\f\v]
[:print:]:匹配所有的可打印字符和空格,等價于:[^\t\n\r\f\v]
[.c.]:功能不明
[=c=]:功能不明
[:<:]:匹配單詞的開始
[:>:]:匹配單詞的結尾

PERL兼容正則(這里可以看出PERL正則的強大):
\a alarm,即 BEL 字符('0)
\cx "control-x",其中 x 是任意字符
\e escape('0B)
\f 換頁符 formfeed('0C)
\n 換行符 newline('0A)
\r 回車符 carriage return('0D)
\t 制表符 tab('0)
\xhh 十六進制代碼為 hh 的字符
\ddd 八進制代碼為 ddd 的字符,或 backreference
\d 任一十進制數字
\D 任一非十進制數的字符
\s 任一空白字符
\S 任一非空白字符
\w 任一“字”的字符
\W 任一“非字”的字符
\b 字分界線
\B 非字分界線
\A 目標的開頭(獨立于多行模式)
\Z 目標的結尾或位于結尾的換行符前(獨立于多行模式)
\z 目標的結尾(獨立于多行模式)
\G 目標中的第一個匹配位置

感謝你能夠認真閱讀完這篇文章,希望小編分享的“posix與perl標準的正則表達式有什么區別”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣威市| 鄂托克旗| 新宁县| 随州市| 如皋市| 临颍县| 绥芬河市| 抚宁县| 横山县| 安阳市| 唐山市| 拉萨市| 瓦房店市| 板桥市| 舟山市| 渭源县| 阿拉善盟| 杭州市| 得荣县| 鄂尔多斯市| 绍兴市| 田阳县| 泸西县| 澄迈县| 阿勒泰市| 张北县| 平乡县| 西安市| 新龙县| 台江县| 尼木县| 永春县| 阿拉尔市| 栾城县| 南川市| 太湖县| 泾阳县| 曲沃县| 小金县| 巨鹿县| 尤溪县|