php正则学习

Jun 06, 2016 pm 07:53 PM
php 発見する 勉強 勉強 通常 コンピューター 自分の 私自身の

今天我在自己的电脑上发现自己以前学习用的正则的资料,拿出来晒一下,让大家看看,学习学习 一 . 正则表达式 1. 匹配符 1) 头匹配符 ^: 如 ^0754, 只匹配开头为 0754 的 字符 串 2) 尾匹配符 $: 如 0754$, 只匹配结尾为 0754 的字符串 3) 全字匹配 : 将 ^

今天我在自己的电脑上发现自己以前学习用的正则的资料,拿出来晒一下,让大家看看,学习学习

.正则表达式
1.
匹配符
    1)
头匹配符"^":^0754,只匹配开头为0754字符
    2)
尾匹配符"$":0754$,只匹配结尾为0754的字符串
    3)
全字匹配:^$结合,^0754$,匹配0754字符串
2.
转义字符
    1)
空字符:
        
换行\n
        
回车\r
        
制表符\t
    2)
其他字符:
        "$" \$
        "^" \^
        "+" \+
        "/" \/
3.
通配符
    1)*
:用来匹配前面一个字符是否在字符串中出现零次或多次.
    
1:'abc*',匹配含有ab的所有字符串。
    2)+
:......................................一次或多次.
    
2:'abc+',匹配含有abc的所有字符串。
    3)?
:......................................零次或一次.
    
3:只匹配含有ababc结尾不再含c的字符串。如abcaaabcaaab都可以,但abcc就不行。
4.
关于转义字符\$与双、单引号(php4环境)
    1)
正则表达式本身就是一个字符串。
    2)
当引号中含有$时,用双、单引号定义就有区别,区别如下:
        (1)
使用单引号定义时,解释器会把引号内所有字符(包括$在内)都原封不动的赋值给字符串变量
        (2)
使用双引号定义时,解释器会把引号内"$"字符以及其后的合法字符(字母、数字、下划线)翻译成变量,直到遇到一个非法字符才认为变量名结束,该非法字符及其后面的字符都被视为一般字符赋给字符串变量,直到遇到下一个"$"为止。
        (3)
注意:单个$出现在双引号的尾部,并且其后面不再有任何字符的时候,解释器不会将其翻译成变量。也不需要加转义\,当然不提倡。
        (4)
如果待匹配的字符中本身就有$,就无法用双引号来定义这个正则表达式,原因是转义字符\$在单,双引号中表示的意义不同:
            
双引号中,\$和单个的$意义是一样的,都是代表尾匹配符,因此c\$$=c\$=c\$\$=c$=c\$\$;双引号中,\$在任何时刻都只代表一个字符"$"echo "c\$$"结果是c$$,并且\$和单个的$(单个的$是指该$无法和其后字符组成变量名)是完全等效的,都是尾匹配符,所以双引号中是无法写入作为非尾匹配字符的字符"$"的,也正是这个原因,大多数需要匹配$时定义正则表达式只能用''
            
单引号中,\$的意义仅仅表示字符"$",尾匹配符是$,不管后面是否有合法变量名字符;单引号中,\$其实是两个字符,如不用于正则匹配将没有任何意义,echo 'c\$$'结果仍是c\$$。单作为正则表达式来使用,单引号中的\$表示的是特殊字符"$",而尾匹配符就是单独的$字符。
    3)
正则表达式的尾匹配符"$"和变量的定义符是相同的:
        
1:定义正则表达式为^ab$$pattern="^ab\$";转义字符\$在双引号中就表示字符$,结果是^ab$
        
2:如上题,使用$pattern="^ab$";显然是错误的,但是由于$在尾部,后面没有其他字符,所以依然适用。
        
3:以字符组合c$结尾的正则表达式:$pattern='c\$$';
        
4:如上题,$pattern="c\$$";正则表达式将\$视为尾匹配符,故只匹配以c结尾。

5."[]"方括号(字符簇)用法
    1)[]
匹配一个字符,在[]中使用^开头表示取非,即其后的字符全部是不匹配的。
    
1[a-zA-Z0-9]匹配所有大小写字母和数字。
    
2[\n\t\r\f]匹配所有空字符。
    
3[^A-Z]不匹配大写字母。
    
4^[^0-9]匹配不以数字开头的字符或字符串
    2)
特殊字符"."(句点)匹配除了"新行"之外的所有字符,模式^.abc$匹配任何以abc结尾的字符,但是不能匹配其本身。模式"."则可以匹配任何字符串,除了空字符串和只有一个"新行"字符的字符串。
    
1'^.abc$';匹配所有尾部含有abc的字符串,不匹配小数(新行),当不匹配abc
    
2'.';匹配所有字符串,但不匹配空值。
    
3'.abc';匹配所有含abc的字符串,小数等等都可以,前提是不以abc为首,不匹配abc
    
4'.abc$';匹配所有以abc结尾的字符串,任何小数等等都可以,不匹配abc
    3)php
提供了内置通用字符簇:
    [[:alpha:]]
任何字母
    [[:digit:]]
任何数字
    [[:alnum:]]
任何字母和数字
    [[:space:]]
任何空白字符
    [[:upper:]]
任何大写字母
    [[:lower:]]
任何小写字母
    [[:punct:]]
任何表点符号
    [[:xdigit:]]
任何十六进制数字
    [[:cntrl:]]
任何ASCII值小于32的字符
    
注意:以上字符簇有个特点,只要被匹配的字符或字符串中有此字符,即匹配正确,不管字符串是以什么方式组成的。
6."{}"
大括号用法
    1)
方括号只能匹配一个字符,而匹配多个字符只能用{}实现:{}用来确定前面内容出现的次数。{n}表示出现n次;{m,n}表示出现m~n次,包括mn次;{n,}表示出现n次或者n次以上。
    
1:^a{10}$;匹配aaaaaaaaaa
    
2:[0-9]{1,}$;匹配所有>0的数。
    2)"{}"
与通配符之间的关系
    ?  
相当于 {0,1} 零次或一次
    *  ..... {0,} 
零次或无数次
    +  ..... {1,} 
一次或无数次
7."()"
用法
    
圆括号"()"括住的pattern表示子模式,如$pattern='([1-9]{1}[0-9]{3})-([0-1]{1}[1-2]{1})-([0-3]{1}([0-9]|))';()扩住的就是一个个子模式,()相当于把他们独立起来,分别匹配而相互不干扰。
.POSIX风格正则表达式函数
1.ereg
    ereg(pattern,string,[array $regs]);
    eregi(pattern,string,[array $regs]);
    ereg
函数在string中找到满足pattern模式的文本,如果找到true,没找到false。如果有第三个参数$regs,那找到的文本将放在$regs[0]中,并且regs数组中将一次存放各个圆括号表达的子模式匹配的结果。$regs[1]中存放了第一个子模式所匹配的结果,$regs[2]中是第二个,顺序从左到右,依次类推。如果没有找到匹配的文本,$regs数组的值不会被改变。
    
注意:如果找到了匹配的文本,不管找到的子模式是多少个>9还是ereg()只会改变$regs数组前10个元素的值。但是这不会影响函数对子模式组合的匹配结果。ereg总是先匹配完,如果没发现匹配的文本就false,发现了就true。如果有子模式,会逐步根据这些子模式重新在字符串中寻找匹配的文本,直到$regs数组被填满10个元素或者所有子模式被匹配完,如果子模式少于10则剩余的$regs将被赋空值。总之一句话,匹配归匹配,$regs$regs$regs只有10个值。
    eregi()
函数与ereg()基本用法相同,只是eregi对大小写不敏感。
2.ereg_replace
eregi_replace
    ereg_replace(pattern,string replacement,string)
    eregi_replace(pattern,string replacement,string)
    string
字串中满足pattern的文本将被替换成replacement。如果string中有pattern匹配的文本,那么返回替换之后的值,如果没有,则返回原来的string值。
    
如果pattern中包含子模式,子模式可以有选择的被保留而不被替换。
    
1pattern中的第二个子模式不被替换,replacement可写成这样:replacement\\2。这样string中匹配的pattern的字符串将被替换为replacement+pattern2pattern2表示匹配pattern的文本中又匹配pattern的第二个子模式的文本。如果使用"\\0"表示保留整个匹配文本。利用这个特性可以实现在特定的字符串之后插入文本的操作。
    replacement
必须是字符串类型变量,如果不是,替换时将强制转换成字符串类型。
3.split()
函数和spliti()函数用法
    split(pattern,string,[int limit]);
    spliti(pattern,string,[int limit]);
    split
以正则表达式pattern定义的模式为分隔符将string分隔成几个部分。如果分隔成功,返回的值为各个分隔后部分组成的数组,失败则返回false。可选limit表示最大分割块数。如果limit5,那么即使string>5个的地方符合patternstring也只被分割为5个部分,最后一个部分是string去掉前四个部分后剩下的部分。返回值中也只有5个元素。
.perl风格正则表达式及相关函数
1.perl
正则语法
    perl
分隔符,可使用"/","!""{}"
    
1/^[^0-9]/     !^[0-9]!    {^[0-9]}三个都一样。
    
在分隔符内部,分隔字符本身就是一个特殊敏感字符,要进行转义。如果用分隔符"/",正则中又用了表达字符的"/",则必须要用"\/"。如果混合用"/""!"就没问题。
    
2/\/\/$/    !//$! 两者也相同
    
3!^\!\![0-9]$!    /^!![0-9]$/ 两者也相同
2.perl
特殊意义字符
    \a ASCII
值为7的告警符
    \b 
词的边界
    \A 
和脱出符号("/")等价
    \B 
非词边界
    \cn 
控制字符
    \d 
单个数字
    \D 
单个非数字
    \s 
单个空白
    \S 
单个非空白
    \w 
单个的字母或下划线
    \W 
单个的非词字符(不是字母也不是下划线)
    \Z 
从目标字串的尾部开始匹配
3.
高级特性
    1)
或运算"|"
        
例如!^ex|em!匹配条件是exem开头的字符串,还可以写成!^e(x|m)!
        
注意:()内的内容代表子模式\
    2)
逻辑符号后面的模式选项
        !
正则表达式!逻辑选项
        A
:只匹配位于目标字串开头的字符。
        E
:该选项使转义字符$构成的正则表达式只匹配目标字符串的结尾字符。如果选择m选项,该选项就被忽略。
        U
:该选项禁止最大长度的搜索。一般情况下,搜索会尽量找最长的匹配字符串。例如模式/a+/"caaaaab"字符串中的匹配结果是"aaaaa",但是使用该选项的模式/a+/U匹配的结果会是"a"
        S
:对模式进行学习,提高查找速度。
        i
:该选项忽略大小写。
        m
:该选项将含有换行符的字符串视为多行而不是一行。这个时候"$""^"等字符会匹配每个换行符。
        s:
该选项使句点"."也匹配换行符。
        x:
该选项通知PHP解释器在分析的时候忽略正则表达式定义中的非转义空格符。这样可以在正则表达式中使用空格来增强其可读性,但这时在表达式中使用空格符必须使用转义字符。
    3)
扩展模式符号。
        (?#comment)    
添加注释comment,可以增强正则可读性。
        (?=pattern)    
指定在模式之后必须跟随值pattern
        (?!pattern)    
指定在模式之后不能跟随值pattern
        (?n)           
在模式内部而非结尾处定义模式选项n
        (?: )           
消耗字符,不捕获匹配结果。
        
:echo ereg("?:^a$","a");//无任何输出。

4.per正则函数
    1.preg_grep
函数
        preg_grep(pattern,array input);
        
输入数组input中寻找匹配模式pattern的字串,并将所有的匹配字符串返回。返回值就是所有匹配的字符串组成的数组。
    2.preg_match
函数
        preg_match(pattern,string subject,[array matches])
        
该函数在subject字符串中寻找匹配pattern的字符串。如果找到则返回一个非零值,否则返回零值。如果选用了可选项matches,那么匹配的字符串将被放到第一个元素的位置,可以用$matches[0]来读取,圆括号匹配的结果也按顺序放在这个数组中,第一个是$matches[1],第二个是$matches[2],依次类推。
    3.preg_match_all
函数
        preg_match_all(pattern,subject,array matches,[int order])
        
该函数在subject字符串中寻找匹配pattern的互不重叠的文本,找到了匹配的文本则返回匹配文本的个数,否则返回0。匹配文本被放在二维数组matches中,matches[0]中存放的是所有符合的字符串。各种嵌入的子模式匹配的结果依次放在数组matches[1]~[n]中。
        order
参数可选,可取的值为PREG_PATTERN_ORDERPREG_SET_ORDER
    4.preg_replace
函数
        preg_replace(pattern,replacement,subject,[int limit])
        
该函数将subject中符合pattern模式的部分替换成replacement,返回值类型和subject类型一样,如果有替换,则返回替换后的值,反之则返回原来的值。
        
参数可以是数组也可以是变量,有几种情况:
            
如果subject参数是数组类型。函数对每一个数组元素进行替换操作;
            
如果pattern是数组则函数根据每一个pattern中的类型进行替换;
            
如果patternreplacement都是数组,则按两个数组中的元素对应完成替换;
            
如果replacement中的元素个数少于pattern中的元素个数。那么不够的部分将有空字符串来代替。
    5.preg_split
函数
        preg_split(pattern,subject,[int limit][flages])
        
该函数以pattern定义的模式为分隔符将subject字符串分隔为若干个部分,返回数组,其中存放被分隔后的字符串。limit可限制返回字符串的数目,如果设置为-1表示对返回的字符串数目不加任何限制。flags也是可选项,其有两个值:PREG_SPLIT_NO_EMPTY设定函数不返回空字符串,PERG_SPLIT_DELIM_CAPTURE,该选项设定pattern中的嵌入子模式也会被函数匹配。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) Apr 08, 2025 am 12:03 AM

PHPでは、最終的なキーワードを使用して、クラスが継承されないようにし、メソッドが上書きされます。 1)クラスを決勝としてマークする場合、クラスを継承することはできません。 2)メソッドを最終的にマークする場合、メソッドはサブクラスによって書き換えられません。最終的なキーワードを使用すると、コードの安定性とセキュリティが保証されます。

PHPの未来:適応と革新 PHPの未来:適応と革新 Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPの現在のステータス:Web開発動向を見てください PHPの現在のステータス:Web開発動向を見てください Apr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

インストール後にMySQLの使用方法 インストール後にMySQLの使用方法 Apr 08, 2025 am 11:48 AM

この記事では、MySQLデータベースの操作を紹介します。まず、MySQLWorkBenchやコマンドラインクライアントなど、MySQLクライアントをインストールする必要があります。 1. mysql-uroot-pコマンドを使用してサーバーに接続し、ルートアカウントパスワードでログインします。 2。CreatedAtaBaseを使用してデータベースを作成し、データベースを選択します。 3. createTableを使用してテーブルを作成し、フィールドとデータ型を定義します。 4. INSERTINTOを使用してデータを挿入し、データをクエリし、更新することでデータを更新し、削除してデータを削除します。これらの手順を習得することによってのみ、一般的な問題に対処することを学び、データベースのパフォーマンスを最適化することでMySQLを効率的に使用できます。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

MySQLはAndroidで実行できますか MySQLはAndroidで実行できますか Apr 08, 2025 pm 05:03 PM

MySQLはAndroidで直接実行できませんが、次の方法を使用して間接的に実装できます。Androidシステムに構築されたLightWeight Database SQLiteを使用して、別のサーバーを必要とせず、モバイルデバイスアプリケーションに非常に適したリソース使用量が少ない。 MySQLサーバーにリモートで接続し、データの読み取りと書き込みのためにネットワークを介してリモートサーバー上のMySQLデータベースに接続しますが、強力なネットワーク依存関係、セキュリティの問題、サーバーコストなどの短所があります。

See all articles