ホームページ  >  記事  >  バックエンド開発  >  PHPの文字列と正規表現

PHPの文字列と正規表現

WBOY
WBOYオリジナル
2016-06-23 13:49:17952ブラウズ

1. 文字列型の特徴

1. PHP は弱い型付け言語であり、他のデータ型は一般に文字列関数の演算に直接適用できます。

   1: <?php
   2: echo substr("123456",2,4);  //输出345
   3: echo substr(123456,2,4);    //输出345
   4: echo hello;                 //先查找hello常量,若没找到,将hello看做字符串使用
   5: ?>

2. 文字列は、文字の集合である「配列」として使用できます。 Re r r

   1: <?php
   2: $str = "www.ido321.com";
   3: echo $str[0];
   4: echo $str[1];
E
   5: echo $str[2];
E
   6: ?>
E

ただし、文字列は実数の配列ではないため、配列の関数は使用できません。たとえば、count ($ STR) は文字列の長さを返しません。 PHP エンジンは文字と配列を区別できないため、あいまいさが生じます。 PHP 4 以降、角括弧の代わりに中括弧が使用されるようになりました。

   1: <?php
   2: //为保证向后兼容,方括号仍然可以使用
   3: $str = "www.ido321.com";
   4: echo $str{0};
   5: echo $str{1};
   6: echo $str{2};
   7: ?>

3. ダブルクォート変数解析

PHP では、文字列がダブルクォーテーションや区切り文字で定義されている場合、その中の変数が解析されます。

   1: <?php
   2: $arr = array('name' => "dwqs",'add' => "www.ido321.com");
   3: echo "$arr[name]";  //可以解析,但是在方括号中不能使用引号
   4: //echo "$arr['name']"; 错误
   5: echo "{$arr['name']}";  //可以解析,用花括号包含元素,name不带引号也是可以的
   6:  
   7: //假设存在对象$square
   8: echo "$square->width"; //可以解析
   9: echo "$square->width00 cent"; //不可以解析,用花括号解决
  10: echo "{$square->width}width00 cent"; //可以解析
  11: ?>

2. 文字列出力関数


3. よく使用される文字列フォーマット関数


PS: PHP のほとんどの関数文字列処理関数はソース文字列を変更せず、新しい文字列を返します

4. 正規表現

正規表現は、このパターンを通じて、特定の文字列のマッチングのパターンを記述します。関数は、マッチングなどの操作を実行します。文字列の検索、置換、分離。アトム、メタキャラクター、パターン修飾子の 3 つの部分で構成されるテキスト パターンです。

PHP には、PCRE と POSIX という 2 つの通常の処理関数ライブラリのセットがあります。前者は preg_ 接頭辞で名前が付けられ、Perl と互換性があります。後者は ereg_ 接頭辞で名前が付けられます。両者の機能は似ていますが、PCRE の方が効率が若干高くなります。

Perl 言語と互換性のある正規表現処理関数:

1. 構文

1.1 デリミタ: Perl と互換性のある正規関数でパターンを使用する場合、パターンにデリミタを追加する必要があります。文字、数字、バックスラッシュ () 以外の任意の文字を区切り文字として使用できます

   1: <?php
   2: //以下正则合法
   3: echo $m1 = '/<\/\w+/';
   4: echo $m2 = '|(\d{3})-\d|Sm';
   5: echo $m3 = '!^(?i)php[34]!';
   6: echo $m4 = '{^\s+(\s+)?$}';
   7: ?>

1.2 アトム: アトムには、文字や数字などの通常の文字が含まれます。スペースと復帰、引用符、*、+ などの特殊文字とメタ文字は、「」でエスケープする必要があります。[apj]、[a-z] などの一般的な文字タイプ。 、D.

   1: <?php
   2: //下面二者等价,匹配e-mail
   3: $mail1 = '/^[0-9a-zA-Z]+@[0-9a-zA-Z]+(\.[0-9a-zA-Z]+){0,3}$/';
   4: $mail2 = '/^\w+@\w+(\.\w+){0,3}$/';
   5: ?>

1.3 メタキャラクター: 正規表現を構築するために使用される特別な意味を持つ文字。 Perl は、*、+、? などのさまざまなメタ文字を使用して一致を検索できます。 .共通のメタキャラクターは次のとおりです

1.4 パターン修飾子: 通常の区切り文字に加えて、照合、置換などの通常の機能を拡張するために使用されます。

2. Perl と互換性のある正規表現関数

2.1 preg_match(string pattern, string subject[,arraymatches]): 文字列の検索と一致に使用されます。パラメータの説明:

処理する必要がある文字列、オプションmatches はパターンの各サブパターンのマッチング結果を保存するために使用されます。matches [0] はパターンに一致するコンテンツ全体を保存します。 matches [1 ] は、パターンの最初のかっこ内の一致したコンテンツを保存します。以下同様です。

   1: <?php
   2: header("content-type:text/html;charset=utf8");
   3: $pattern = '/(http):\/\/(www)\.([^\.\/]+)\.(com|net|org)/i';
   4: $subject = "我的博客:http://www.ido321.com";
   5: if(preg_match($pattern, $subject,$matches)){
   6:     echo "搜索的URL是:".$matches[0]."<br/>";  //数组第1个元素保存整个匹配结果
   7:     echo "URL中的协议是:".$matches[1]."<br/>";//数组第2个元素保存第1个字表达式
   8:     echo "URL中的主机是:".$matches[2]."<br/>";//数组第3个元素保存第2个字表达式
   9:     echo "URL中的域名是:".$matches[3]."<br/>";//数组第4个元素保存第3个字表达式
  10:     echo "URL中的顶域是:".$matches[4]."<br/>";//数组第5个元素保存第4个字表达式
  11: }

結果

preg_match_all() 関数は preg_match() 関数と似ていますが、前者は最後まで一致するという点です。文字列、後者は最初の一致時に一致します。その後、一致を停止します。

2.2 preg_grep(string pattern,array iput): 配列内の要素を照合し、通常のパターンに一致する配列ユニットを返します。パラメータの説明:

t パターンは規則的で、入力は一致する必要がある配列です。

rree rree rree rree rree rree rree

             2.3  preg_replace(mixed pattern,mixed replacement,mixed subject[,int limit]):字符串替换。说明:

                     该函数会在subject中搜索与pattern的匹配项,并用replacement替换。limit用于限制匹配的次数,即替换的次数。

   1: <?php
   2: $pattern = '/<[\/\!]*?[^<>]*?/is';
   3: $text = '这个文本有<b>粗体</b>和<u>带有下划线</u>以及<i>斜体</i>';
   4: echo preg_replace($pattern,"",$text);  //将所有HTML标记替换为空
   5: echo preg_replace($pattern,"",$text,2); //值替换前2个HTML标记
   6: ?>

              2.4  preg_split(string pattern,string subject[,int limit[,int flags]]):对字符串进行分割。说明:

                     函数返回一个数组。数组元素包含subject中与pattern匹配作为边界所分割的字符串,limit含义见2.3,flags含义请参考文档。

   1: <?php
   2: //按任数量的空格分割字符串
   3: $kerwords = preg_split("/[\s,]+/","hypertext language,programming");
   4:  
   5: //输出:Array([0]=>hypertext [1]=>language,[2[=>programming)
   6: print_r($kerwords);
   7: ?>

来源:http://www.ido321.com/612.html

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