ホームページ > バックエンド開発 > PHPチュートリアル > PHP レギュラーと js レギュラー_PHP チュートリアル

PHP レギュラーと js レギュラー_PHP チュートリアル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-07-13 17:53:11
オリジナル
1062 人が閲覧しました


PHP の正規表現関数

PHP には 2 セットの正規表現関数ライブラリがあります。 1 つのセットは PCRE (Perl 互換正規表現) ライブラリによって提供されます。 PCRE ライブラリは、Perl と同じ構文規則を使用し、接頭辞「preg_」が付いた名前の関数を使用して正規表現パターン マッチングを実装します。もう 1 つのセットは、POSIX (ポータブル オペレーティング システム インターフェイス) 拡張ライブラリによって提供されます。 POSIX 拡張正規表現は POSIX 1003.2 で定義されており、通常は「ereg_」接頭辞が付いた名前の関数を使用します。
2 つの関数ライブラリ セットの関数は似ていますが、実行効率が若干異なります。一般に、同じ機能を実現するには、PCRE ライブラリを使用した方が効率がわずかに優れています。その使用法については以下で詳しく説明します。


正規表現マッチング
1. preg_match()
関数プロトタイプ: int preg_match (string $pattern, string $content [, array $matches])
preg_match () 関数は、$content 文字列内で、$pattern で指定された正規表現に一致するコンテンツを検索します。 $matches が指定されている場合、一致する結果がそこに配置されます。 $matches[0] にはパターン全体に一致するテキストが含まれ、$matches[1] には括弧で囲まれたパターン要素の最初にキャプチャされた一致が含まれます。この関数は 1 つの一致のみを実行し、最終的に一致結果の数 0 または 1 を返します。リスト 6.1 は、preg_match() 関数のコード例を示しています。
コード 6.1 日付と時刻の一致
// 照合する必要がある文字列。 date 関数は現在時刻を返します
$content = "現在の日付と時刻は ".date("Y-m-d h:i a") です。"、私たちは一緒に PHP を学習しています。";
//時刻に合わせていつもの方法で
If (preg_match ("/d{4}-d{2}-d{2} d{2}:d{2} [ap]m/", $content, $m))
{
echo "一致する時間は次のとおりです:" .$m[0] "n";
}
//時間パターンが明らかなので単純に合わせる事も可能
If (preg_match ("/([d-]{10}) ([d:]{5} [ap]m)/", $content, $m))
{
echo "現在の日付は次のとおりです:" .$m[1] "n";
echo "現在時刻は次のとおりです:" .$m[2] "n";
}
?>
これは、単純な動的テキスト文字列マッチングの例です。現在のシステム時刻を「2006年8月17日13時25分」とすると、以下の内容が出力されます。
一致時刻は: 2006-08-17 01:25 pm
現在の日付: 2006-08-17
現在の時刻: 午後 1 時 25 分
2. ereg() と eregi()
ereg() は、POSIX 拡張ライブラリの正規表現マッチング関数です。 eregi() は、ereg() 関数の大文字と小文字を無視するバージョンです。どちらも preg_match と同様の関数を持っていますが、この関数は一致が成功したかどうかを示すブール値を返します。 POSIX 拡張ライブラリ関数の最初のパラメータは正規表現文字列を受け入れる、つまり区切り文字は必要ないことに注意してください。たとえば、リスト 6.2 はファイル名のセキュリティをチェックする方法です。
コード6.2 ファイル名のセキュリティチェック
$username = $_SERVER['REMOTE_USER'];
$filename = $_GET['file'];
//システムのセキュリティを確保するためにファイル名をフィルタリングします
If (!ereg('^[^./][^/]*$', $userfile))
{
die('これは違法なファイル名ではありません!');
}
//ユーザー名をフィルタリングします
If (!ereg('^[^./][^/]*$', $username))
{
die('これは無効なユーザー名ではありません');
}
                                            //セキュリティフィルタリングを通じてファイルパスを照合します
$thefile = "/home/$username/$filename";
?>
通常、Perl 互換の正規表現マッチング関数 perg_match() を使用すると、ereg() または eregi() を使用するより高速になります。文字列に特定の部分文字列が含まれているかどうかだけを確認したい場合は、strstr() 関数または strpos() 関数を使用することをお勧めします。
3. preg_grep()
関数プロトタイプ: 配列 preg_grep (文字列 $pattern, 配列 $input)
preg_grep() 関数は、指定された $pattern パターンに一致する $input 配列内のセルを含む配列を返します。 Preg_grep() は、入力配列 $input 内の各要素の照合のみを実行します。リスト 6.3 は、preg_grep() 関数の使用法を簡単に説明する例を示しています。
コード 6.3 配列クエリのマッチング
$subjects = array(
「機械工学」「医学」
「社会科学」、「農業」、
「商学」「政治」
);

//匹配所有仅由有一个单词组成的科目名
$alonewords = preg_grep("/^[a-z]*$/i", $subjects);
?>
6.3.2  进行全局正则表达式匹配
1.preg_match_all()
与preg_match()函数类似。如果使用了第三个参数,将把所有可能的匹配结果放入。本函数返回整个模式匹配的次数(可能为0),如果出错返回False。下面是一个将文本中的URL链接地址转换为HTML代码的示例。代码6.4是preg_match_all()函数的使用范例。
代码6.4  将文本中的链接地址转成HTML
//功能:将文本中的链接地址转成HTML
//输入:字符串
//输出:字符串
function url2html($text)
{
//匹配一个URL,直到出现空白为止
preg_match_all("/http:\/\/?[^\s]+/i", $text, $links);
//设置页面显示URL地址的长度
$max_size = 40;
foreach($links[0] as $link_url)
{
//计算URL的长度。如果超过$max_size的设置,则缩短。
$len = strlen($link_url);
if($len > $max_size)
             {
                 $link_text = substr($link_url, 0, $max_size)."...";
             } else {
                 $link_text = $link_url;
             }
             //生成HTML文字
             $text = str_replace($link_url,"$link_text",$text);
         }
         return $text;
     }
              
     //运行实例
     $str = “这是一个包含多个URL链接地址的多行文字。欢迎访问http://www.taoboor.com”;
     print url2html($str);
     /*输出结果
        这是一个包含多个URL链接地址的多行文字。欢迎访问
         http://www.taoboor.com

     */
?>
2.多行匹配
仅仅使用POSIX下的正则表式函数,很难进行复杂的匹配操作。例如,对整个文件(尤其是多行文本)进行匹配查找。使用ereg()对此进行操作的一个方法是分行处理。代码6.5的示例演示了ereg()如何将INI文件的参数赋值到数组之中。
代码6.5  文件内容的多行匹配
$rows = file('php.ini'); //将php.ini文件读到数组中
//循环遍历
foreach($rows as $line)
{
If(trim($line))
{
//将匹配成功的参数写入数组中
if(eregi("^([a-z0-9_.]*) *=(.*)", $line, $matches))
{
$options[$matches[1]] = trim($matches[2]);
}
unset($matches);
}
}
//输出参数结果
print_r($options);
?>
提示
这里只是为了方便说明问题。解析一个*.ini文件,最佳方法是使用函数parse_ini_file()。该函数直接将*.ini文件解析到一个大数组中。
6.3.3  正则表达式的替换
1.ereg_replace()和eregi_replace()
函数原型:string ereg_replace (string $pattern, string $replacement, string $string)
                                                                 string eregi_replace (string $pattern, string $replacement, string $string)
ereg_replace()在$string中搜索模式字符串$pattern,并将所匹配结果替换为$replacement。当$pattern中包含模式单元(或子模式)时,$replacement中形如“\1”或“$1”的位置将依次被这些子模式所匹配的内容替换。而“\0”或“$0”是指整个的匹配字符串的内容。需要注意的是,在双引号中反斜线作为转义符使用,所以必须使用“\\0”,“\\1”的形式。
eregi_replace()和ereg_replace()的功能一致,只是前者忽略大小写。代码6.6是本函数的应用实例,这段代码演示了如何对程序源代码做简单的清理工作。
代码6.6  源代码的清理
$lines = file('source.php'); //将文件读入数组中
for($i=0; $i<count($lines); $i++)
{
//将行末以“\\”或“#”开头的注释去掉
$lines[$i] = eregi_replace("(\/\/|#).*$", "", $lines[$i]);
//将行末的空白消除
$lines[$i] = eregi_replace("[ \n\r\t\v\f]*$", "\r\n", $lines[$i]);
}
//整理后输出到页面
echo htmlspecialchars(join("",$lines));
?>
2.preg_replace()
函数原型:mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit])
preg_replace较ereg_replace的功能更加强大。其前三个参数均可以使用数组;第四个参数$limit可以设置替换的次数,默认为全部替换。代码6.7是一个数组替换的应用实例。
代码6.7  数组替换
//字符串
$string = "Name: {Name}<br>\nEmail: {Email}
\nAddress: {Address}
\n";
     //模式
     $patterns =array(
             "/{Address}/",
             "/{Name}/",
             "/{Email}/"
    );
     //替换字串
     $replacements = array (
             "No.5, Wilson St., New York, U.S.A",
             "Thomas Ching",
             "tom@emailaddress.com",
     );
     //输出模式替换结果
     print preg_replace($patterns, $replacements, $string);
?>
输出结果如下。
Name: Thomas Ching",
Email: tom@emailaddress.com
Address: No.5, Wilson St., New York, U.S.A
在preg_replace的正则表达式中可以使用模式修正符“e”。其作用是将匹配结果用作表达式,并且可以进行重新运算。例如:
$html_body = “<HTML>

TEST

My Picture”;
     //输出结果中HTML标签将全部为小写字母
     echo preg_replace (
             "/(<\/?)(\w+)([^>]*>)/e",
             "'\\1'.strtolower('\\2').'\\3'",   //此处的模式变量\\2将被strtolower转换为小写字符
              $html_body);
?>
提示
preg_replace函数使用了Perl兼容正则表达式语法,通常是比ereg_replace更快的替代方案。如果仅对字符串做简单的替换,可以使用str_replace函数。
6.3.4  正则表达式的拆分
1.split()和spliti()
函数原型:array split (string $pattern, string $string [, int $limit])
本函数返回一个字符串数组,每个单元为$string经正则表达式$pattern作为边界分割出的子串。如果设定了$limit,则返回的数组最多包含$limit个单元。而其中最后一个单元包含了$string中剩余的所有部分。spliti是split的忽略大小版本。代码6.8是一个经常用到关于日期的示例。
代码6.8  日期的拆分
$date = "08/30/2006";

//分隔符可以是斜线,点,或横线
list($month, $day, $year) = split ('[/.-]', $date);

//输出为另一种时间格式
echo "Month: $month; Day: $day; Year: $year<br />\n";
?>
2.preg_split()
本函数与split函数功能一致。代码6.9是一个查找文章中单词数量的示例。
代码6.9  查找文章中单词数量
$seek = array();
$text = "I have a dream that one day I can make it. So just do it, nothing is impossible!";

//将字符串按空白,标点符号拆分(每个标点后也可能跟有空格)
$words = preg_split("/[.,;!\s']\s*/", $text);
foreach($words as $val)
{
$seek[strtolower($val)] ++;
}
echo "共有大约" .count($words). "个单词。";
echo "其中共有" .$seek['i']. "个单词“I”。";
?>
提示
preg_split()函数使用了Perl兼容正则表达式语法,通常是比split()更快的替代方案。使用正则表达式的方法分割字符串,可以使用更广泛的分隔字符。例如,上面对日期格式和单词处理的分析。如果仅用某个特定的字符进行分割,建议使用explode()函数,它不调用正则表达式引擎,因此速度是最快的。


下面是一些讲解和例子,仅供大家参考和修改使用:

2. “^d+$” //非負の整数(正の整数+0)
3. "^[0-9]*[1-9][0-9]*$" //正の整数
4. "^((-d+)|(0+))$" //非正の整数 (負の整数 + 0)
5. "^-[0-9]*[1-9][0-9]*$" //負の整数
6. "^-?d+$" //整数
7. "^d+(.d+)?$" //非負の浮動小数点数(正の浮動小数点数+0)
8. "^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]* .[0-9]+)|([0-9]*[1-9][0-9]*))$" //正の浮動小数点数
9. "^((-d+(.d+)?)|(0+(.0+)?))$" //非正の浮動小数点数 (負の浮動小数点数 + 0)
10. "^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9] ]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負の浮動小数点数
11. "^(-?d+)(.d+)?$" //浮動小数点数
12. "^[A-Za-z]+$" //英字26文字からなる文字列
13. "^[A-Z]+$" //英大文字26文字からなる文字列
14. "^[a-z]+$" //英小文字26文字からなる文字列
15. "^[A-Za-z0-9]+$" //数字と26文字の英字からなる文字列
16. "^w+$" //数字、26 文字の英字、またはアンダースコアで構成される文字列
17. "^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$" //メールアドレス
18. "^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$" //url
19. /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([ 1-9]{1}))|(3[0|1]))$/ // 年-月-日
20. /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3 [0|1]))/(d{2}|d{4})$/ // 月/日/年
21. "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.) |(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //エミル
22. /^((+?[0-9]{2,4}-[0-9]{3,4}-)|([0-9]{3,4}-))?([0 -9]{7,8})(-[0-9]+)?$/ //電話番号
23. "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[ 0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d| 25[0-5])$" //IP アドレス
24.
25. 漢字に一致する正規表現: [u4e00-u9fa5]
26. 全角文字 (漢字を含む) の一致: [^x00-xff]
27. 空白行に一致する正規表現: n[s| ]*r
28. HTML タグに一致する正規表現: /<(.*)>.*|<(.*) />/
29. 先頭と末尾のスペースに一致する正規表現: (^s*)|(s*$)
30. メールアドレスに一致する正規表現: w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
31. URL に一致する正規表現: ^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\? \S *)?$
32. 一致するアカウントが合法かどうか (文字で始まり、5 ~ 16 バイトが許可され、英数字のアンダースコアが許可されます): ^[a-zA-Z][a-zA-Z0-9_]{4,15}$
33. 国内の電話番号と一致します: (d{3}-|d{4}-)?(d{8}|d{7})?
34. 一致する Tencent QQ 番号: ^[1-9]*[1-9][0-9]*$
35.
36.
37. 正規表現のコンテキストにおけるメタキャラクターとその動作:
38.
39. 次の文字を特殊文字、リテラル文字、後方参照、または 8 進エスケープ文字としてマークします。
40.
41. ^ は入力文字列の先頭と一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、^ は 'n' または 'r' の後の位置にも一致します。
42.
43. $ は入力文字列の終了位置と一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は 'n' または 'r' の前の位置にも一致します。
44.
45. * 前の部分式と 0 回以上一致します。
46.
47. + 前の部分式と 1 回以上一致します。 + は {1,} と同等です。
48.
49. ? 前の部分式と 0 回または 1 回一致します。 ? {0,1} に相当します。
50.
51. {n} n は、特定の回数 n 回一致する非負の整数です。
52.
53. {n,} n は、少なくとも n 回一致する非負の整数です。
54.
55. {n,m} m と n は両方とも非負の整数であり、n 56.
57. ? 文字が他のリミッター (*、+、?、{n}、{n,}、{n,m}) の直後にある場合、一致パターンは非貪欲です。非貪欲モードは検索文字列の可能な限り少ない部分と一致しますが、デフォルトの貪欲モードは検索文字列の可能な限り多くの部分と一致します。
58.
59. . 「n」を除く任意の 1 文字と一致します。 「n」を含む任意の文字と一致するには、「[.n]」のようなパターンを使用します。
60. (パターン) パターンと一致し、この一致を取得します。
61.
62. (?:pattern) はパターンに一致しますが、一致結果は取得されません。これは、これが非取得一致であり、後で使用するために保存されないことを意味します。
63.
64. (?=pattern) 前方参照。文字列一致パターンの先頭にある検索文字列と一致します。これは非フェッチ一致です。つまり、後で使用するために一致をフェッチする必要はありません。
65.
66. (?!パターン) ネガプレビュー、(?=パターン) の反対
67.
68. x|y は x または y と一致します。
69.
70. [xyz] 文字セット。
71.
72. [^xyz] 負の値の文字セット。
73.
74. [a-z] 文字範囲。指定された範囲内の任意の文字と一致します。
75.
76. [^a-z] 負の文字範囲。指定された範囲内にない任意の文字と一致します。
77.
78. b は、単語とスペースの間の位置を指す単語境界に一致します。
79.
80. B は単語以外の境界に一致します。
81.
82. cx は、x で指定された制御文字と一致します。
83.
84. d は数字と一致します。 [0-9]に相当します。
85.
86. D は数字以外の文字と一致します。 [^0-9] と同等。
87.
88. f はフォーム フィード文字と一致します。 x0c および cL に相当します。
89.
90. n は改行文字に一致します。 x0a および cJ に相当します。
91.
92. r は復帰文字と一致します。 x0d および cM に相当します。
93.
94. s は、スペース、タブ、フォーム フィードなどを含む任意の空白文字と一致します。 【fnrtv】に相当。
95.
96. S は空白以外の任意の文字に一致します。 [^ fnrtv] に相当します。
97.
98. t はタブ文字と一致します。 x09 および cI に相当します。
99.
100. v は垂直タブ文字と一致します。 x0b および cK に相当します。
101.
102. w は、アンダースコアを含む任意の単語文字に一致します。 「[A-Za-z0-9_]」と同等。
103.
104. W は、単語以外の文字に一致します。 「[^A-Za-z0-9_]」と同等。
105.
106. xn は n と一致します。n は 16 進数のエスケープ値です。 16 進数のエスケープ値は、正確に 2 桁の長さである必要があります。
107.
108. num は num と一致します。ここで、num は正の整数です。取得した一致への参照。
109.
110. n は、8 進数のエスケープ値または後方参照を示します。 n の前に少なくとも n 個のフェッチされた部分式がある場合、n は後方参照です。それ以外の場合、n が 8 進数 (0 ~ 7) の場合、n は 8 進数のエスケープ値になります。
111.
112. nm は、8 進エスケープ値または後方参照を識別します。 nm の前に少なくとも nm 個のフェッチされた部分式がある場合、nm は後方参照です。 nm の前に少なくとも n の get がある場合、n は後方参照であり、その後にリテラル m が続きます。前述の条件がどちらも当てはまらず、n と m が両方とも 8 進数 (0 ~ 7) である場合、nm は 8 進数のエスケープ値 nm と一致します。
113.
114. nml n が 8 進数 (0 ~ 3) で、m と l が両方とも 8 進数 (0 ~ 7) の場合、8 進数のエスケープ値 nml と一致します。
115.
116. un は n と一致します。n は 4 桁の 16 進数で表される Unicode 文字です。
117.
118. 漢字に一致する正規表現: [u4e00-u9fa5]
119.
120. 全角文字 (漢字を含む) の一致: [^x00-xff]
121.
122. 空白行に一致する正規表現: n[s| ]*r
123.
124. HTML タグに一致する正規表現: /<(.*)>.*|<(.*) />/
125.
126. 先頭と末尾のスペースに一致する正規表現: (^s*)|(s*$)
127.
128. メールアドレスを照合するための正規表現: w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
129.
130. URL に一致する正規表現: http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
131.
132. 正規表現を使用して、Web フォームのテキスト ボックスの入力内容を制限します。
133.
134. 正規表現を使用して入力を中国語のみに制限します: onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData( 'テキスト').replace(/[^u4E00-u9FA5]/g,''))"
135.
136. 正規表現を使用して全角文字のみの入力を制限します: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text', ClipboardData.getData ('text').replace(/[^uFF00-uFFFF]/g,''))"
137.
138. 正規表現を使用して入力を数値に制限します: onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text ' ).replace(/[^d]/g,''))"
139.
140. 正規表現を使用して入力を数字と英語のみに制限します: onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData(') text').replace(/[^d]/g,''))"
141.
142. =========よく使われる正規表現
143.
144.
145.
146. 漢字に一致する正規表現: [u4e00-u9fa5]
147.
148. 全角文字 (漢字を含む) の一致: [^x00-xff]
149.
150. 空の行に一致する正規表現: n[s| ]*r
151.
152. HTML タグに一致する正規表現: /<(.*)>.*|<(.*) />/
153.
154. 先頭と末尾のスペースに一致する正規表現: (^s*)|(s*$)
155.
156. IP アドレスに一致する正規表現: /(d+).(d+).(d+).(d+)/g //
157.
158. メールアドレスに一致する正規表現: w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
159.
160. URL に一致する正規表現: http://(/[w-]+.)+[w-]+(/[w- ./?%&=]*)?
161.
162. SQL ステートメント: ^(select|drop|delete|create|update|insert).*$
163.
164. 1. 負でない整数: ^d+$
165.
166. 2. 正の整数: ^[0-9]*[1-9][0-9]*$
167.
168. 3. 正でない整数: ^((-d+)|(0+))$
169.
170. 4. 負の整数: ^-[0-9]*[1-9][0-9]*$
171.
172. 5. 整数: ^-?d+$
173.
174. 6. 非負の浮動小数点数: ^d+(.d+)?$
175.
176. 7. 正の浮動小数点数: ^((0-9)+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][ 0 -9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$
177.
178. 8. 非正の浮動小数点数: ^((-d+.d+)?)|(0+(.0+)?))$
179.
180. 9. 負の浮動小数点数: ^(-((正の浮動小数点数正規表現)))$
181.
182. 10. 英語の文字列: ^[A-Za-z]+$
183.
184. 11. 英語の大文字文字列: ^[A-Z]+$
185.
186. 12. 英語の小文字文字列: ^[a-z]+$
187.
188. 13. 英語の文字と数字の文字列: ^[A-Za-z0-9]+$
189.
190. 14. 英数字と下線の文字列: ^w+$
191.
192. 15. メールアドレス: ^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$
193.
194. 16. URL: ^[a-zA-Z]+://(w+(-w+)*)(.(w+(-w+)*))*(?s*)?$
195. または: ^http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&_~`@[]':+!]*([ ^<>""])*$
196.
197. 17. 郵便番号: ^[1-9]d{5}$
198.
199. 18. 中国語: ^[u0391-uFFE5]+$
200.
201. 19. 電話番号: ^(((d{2,3}))|(d{3}-))?((0d{2,3})|0d{2,3}-)?[1 -9]d{6,7}(-d{1,4})?$
202.
203. 20. 携帯電話番号: ^(((d{2,3}))|(d{3}-))?13d{9}$
204.
205. 21. 全角文字(漢字含む):^x00-xff
206.
207. 22. 先頭と末尾のスペースを一致させる: (^s*)|(s*$) (vbscript のようなトリム関数)
208.
209. 23. HTML タグの一致: <(.*)>.*|<(.*) />
210.
211. 24. 空白行と一致: n[s| ]*r
212.
213. 25. 情報内のネットワーク リンクを抽出します: (h|H)(r|R)(e|E)(f|F) *= *('|")?(w|\|/|.)+ ('|"| *|>)?
214.
215. 26. 情報内の電子メール アドレスを抽出します: w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
216.
217. 27. 情報内の画像リンクを抽出します: (s|S)(r|R)(c|C) *= *('|")?(w|\|/|.)+('|" | *|>)?
218.
219. 28. 情報内の IP アドレスを抽出します: (d+).(d+).(d+).(d+)
220.
221. 29. 情報内の中国の携帯電話番号を抽出します: (86)*0*13d{9}
222.
223. 30. 情報内の中国の固定電話番号を抽出します: ((d{3,4})|d{3,4}-|s)?d{8}
224.
225. 31. 情報内の中国の電話番号を抽出します (携帯電話と固定電話を含む): ((d{3,4})|d{3,4}-|s)?d{7,14}
226.
227. 32. 情報内の中国の郵便番号を抽出します: [1-9]{1}(d+){5}
228.
229. 33. 情報内の浮動小数点数 (つまり、10 進数) を抽出します: (-?d*).?d+
230.
231. 34. 情報内の任意の数値を抽出します: (-?d*)(.d+)?
232.
233. 35. IP: (d+).(d+).(d+).(d+)
234.
235. 36. 電話市外局番: /^0d{2,3}$/
236.
237. 37. テンセント QQ 番号: ^[1-9]*[1-9][0-9]*$
238.
239. 38. アカウント番号 (文字で始まり、5 ~ 16 バイト、英数字のアンダースコアを使用可能): ^[a-zA-Z][a-zA-Z0-9_]{4,15}$
240.
241. 39. 中国語、英語、数字、下線: ^[u4e00-u9fa5_a-zA-Z0-9]+$


JS の通常関数 match、exec、test、search、replace、split の使い方をまとめた入門書
js: パターン = /-+.*/
Pattern.test ('あなたの文字') BOOL 値に戻ります
Pattern.exec ('あなたのキャラクター') 配列を返します
str.replace(param1,param2) ここでの param1 は直接文字または正規表現であり、param2 は最終的な置換値であることに注意してください。結果は戻り値です

以下はいくつかのメソッドの詳細な紹介です:
マッチメソッド
正規表現パターンを使用して文字列の検索を実行し、検索を含む結果を配列として返します。
stringObj.match(rgExp)
パラメータ
文字列オブジェクト
必須。検索する String オブジェクトまたは文字列リテラル。
rgExp
必須。正規表現パターンと使用可能なフラグを含む正規表現オブジェクトです。正規表現パターンと使用可能なフラグを含む変数名または文字列リテラルも使用できます。
残りの命令は exec と同じですが、match の式がグローバル タグ g と一致する場合、ループせずにすべての一致が表示されますが、すべての一致には部分一致が含まれない点が異なります。
例 1:
function MatchDemo(){ var r, re; // 変数を宣言します。 var s = "スペインの雨は主に平地に降ります"; re = /(a)in/ig; // 正規表現パターンを作成します。 r = s.match(re); // 検索文字列との一致を試みます。 document.write(r); //返された配列には、r[0]、r[1]、r[2]、r[3] の 4 つの出現がすべて含まれます。 // しかし、サブマッチ a はありません。 }出力結果: ain,ain,ain,ain


実行メソッド

正規表現パターンを使用して文字列を検索し、検索結果の最初の値 (配列) を返します。一致に失敗した場合は、null を返します。
rgExp.exec(str)
パラメータ
rgExp
必須。正規表現パターンと使用可能なフラグを含む正規表現オブジェクト。
ストラ
必須。検索を実行する String オブジェクトまたは文字列リテラル。
返される配列には次のものが含まれます:
入力: 検索された文字列全体の値
インデックス: 一致した結果の位置 (ビット)
lastInput: 次の一致結果の位置
arr: 結果の値、arr[0] は完全一致の結果、arr[1,2...] は式内の () の部分一致、左から右に 1,2... です。
例 2:
コードは次のとおりです:

関数 RegExpTest(){
var src="http://sumsung753.blog.163.com/blog/愛しています!";
var re = /w+/g; // g はテキスト全体と一致することに注意してください。追加しない場合は、常に最初の一致のみが返されます。
vararr;
while((arr = re.exec(src)) !=null){ //exec により arr は最初の一致を返し、while ループにより re は g 内の次の一致を検索します。
document.write(arr.index + "-" + arr.lastIndex + ":" + arr + "
");
for(arr にキーを入力){
document.write(key + "=>" + arr[key] + "
");
}
document.write("
");
}
}
window.onload = RegExpTest();

出力結果:
0-1:I //0 はインデックス、i の位置、1 は次の一致の位置です
input=>愛しています!
インデックス=>0
lastIndex=>1
0=>私
2-6:愛
input=>愛しています!
インデックス=>2
lastIndex=>6
0=>愛
7-10:あなた
input=>愛しています!
インデックス=>7
lastIndex=>10
0=>あなた
注: マニュアルによると、exec は一致した結果の最初の値のみを返します。たとえば、上記の例で while ループが使用されていない場合は、「I」のみが返されます (ただし、i の後には love と you が両方ともスペースされます)。式に準拠)、使用される re 式に関係なく、グローバル フラグ g は使用されません。ただし、グローバル フラグ g が正規表現に設定されている場合、exec は lastIndex の値で示される位置の検索を開始します。グローバル フラグが設定されていない場合、exec は lastIndex の値を無視し、文字列の先頭から検索します。この機能を使用すると、exec を繰り返し呼び出してすべての一致を調べることができます。これは、g フラグを持つ match と同等です。
もちろん、正規表現で g を使用するのを忘れてループ (while、for など) を使用すると、exec は毎回最初のループをループし、無限ループが発生します。
exec の出力には部分一致が含まれます。
例 3:
コードは次のとおりです:

関数execDemo(){
var r, re; // 変数を宣言します。
var s = "スペインの雨は主に平地に降ります";
re = /[w]*(ai)n/ig;
r = re.exec(s);
document.write(r + "
");
for(rにキー){
document.write(key + "-" + r[key] + "
");
}
}
window.onload = execDemo();

出力:
雨よ、あい
input-スペインの雨は主に平地に降ります
インデックス-4
lastIndex-8
0-雨
1-あい

試験方法

指定された正規表現が検索対象の文字列に一致するかどうかを示すブール値を返します。
rgexp.test(str)
パラメータ
rgexp
必須。正規表現パターンまたは使用可能なフラグを含む正規表現オブジェクト。
ストラ
必須。ルックアップをテストする文字列。
説明
テスト メソッドは、文字列が指定された正規表現パターンに一致するかどうかを確認し、一致する場合は true を返し、そうでない場合は false を返します。
例 4:
コードは次のとおりです:

関数 TestDemo(re, s){
var s1;
if (再テスト)
s1 = "正規表現に一致";
それ以外
s1 = "正規表現と一致しません";
return("'" + s + "'" + s1 + "'"+ re.source + "'");
}
window.onload = document.write(TestDemo(/ab/,'cdef'));

出力結果: 'cdef' は正規表現 'ab' と一致しません
注: test() は正規表現の lastIndex 属性を継承します。表現がグローバル フラグ g と一致する場合は注意してください。
例5:
コードは次のとおりです:

関数 testDemo(){
var r, re; // 変数を宣言します。
var s = "私";
re = /I/ig; // 正規表現パターンを作成します。
document.write(re.test(s) + "
"); // ブール値の結果を返します。
document.write(re.test(s) + "
");
document.write(re.test(s));
}
testDemo();

出力結果:
本当

本当
test() が 2 回目に呼び出されるとき、lastIndex は次の一致位置 1 を指すため、2 回目の一致は失敗し、lastIndex は再び 0 を指します。これは、一致が 3 回繰り返されることを意味します。次の例は、test の lastIndex 属性を示しています。 例6:
コードは次のとおりです:

関数 testDemo(){
var r, re; // 変数を宣言します。
var s = "私";
re = /I/ig; // 正規表現パターンを作成します。
document.write(re.test(s) + "
"); // ブール値の結果を返します。
document.write(re.lastIndex); // ブール値の結果を返します。
}
testDemo();

出力:
本当
1
解決策: test() の lastIndex 属性を毎回 0 に再ポイントします (re.lastIndex = 0;

)

検索方法

正規表現検索内容に一致する最初の部分文字列の位置(オフセットビット)を返します。
stringObj.search(rgExp)
パラメータ
文字列オブジェクト
必須。検索対象の String オブジェクトまたは文字列リテラル。
rgExp
必須。正規表現パターンと使用可能なフラグを含む正規表現オブジェクト。
説明: 見つかった場合は、サブキャラクタのオフセット ビットを先頭に戻し、見つからない場合は -1 を返します。
例6:
コードは次のとおりです:

関数 SearchDemo(){
var r, re; // 変数を宣言します。
var s = "スペインの雨は主に平地に降ります。";
re = /falls/i; // 正規表現パターンを作成します。
re2 = /tom/i;
r = s.search(re); // 文字列を検索します。
r2 = s.search(re2);
return("r: " + r + "; r2: " + r2); // ブール値の結果を返します。
}
document.write(SearchDemo());

出力: r: 18; r2: -1

メソッドを置き換える
正規表現に基づいてリテラル置換後の文字列のコピーを返します。
stringObj.replace(rgExp, replaceText)
パラメータ
文字列オブジェクト
必須。この置換を実行する String オブジェクトまたは文字列リテラル。文字列は replace メソッドでは変更されません。
rgExp
必須。正規表現パターンまたは使用可能なフラグを含む正規表現オブジェクトです。 String オブジェクトまたはリテラルも使用できます。 rgExp が正規表現オブジェクトではない場合、文字列に変換され、文字列の正規表現への変換は行われません。
テキストを置き換える
必須。 stringObj 内の rgExp 内の一致する各位置をオブジェクトに含まれるリテラルで置き換える String オブジェクトまたは文字列リテラルです。 Jscript 5.5 以降では、replaceText パラメータを置換テキストを返す関数にすることもできます。
説明
replace メソッドの結果は、指定された置換を含む stringObj オブジェクトのコピーです。これは、一致する項目が指定どおりに置換され、その他の項目は変更されずに StringObj として返されることを意味します。
ECMAScript v3 では、replace() メソッドのパラメータ置換には文字列ではなく関数を使用できることが規定されています。この場合、関数は一致するたびに呼び出され、関数が返す文字列が置換テキストとして使用されます。この関数の最初のパラメータは、パターンに一致する文字列です。次の引数は、パターン内の部分式に一致する文字列であり、そのような引数は 0 個以上存在できます。次のパラメータは、一致が発生する stringObject 内の位置を宣言する整数です。最後のパラメータは stringObject 自体です。結果は、一致する各部分文字列が関数呼び出しの対応する戻り値で置き換えられた文字列値になります。関数パラメーターを使用すると、より複雑な操作を実行できます。
例 7:
コードは次のとおりです:

関数 f2c(s) {
var test = /(d+(.d*)?)Fb/g; // 華氏温度の可能なモードが 123F または 123.4F であることを示します。ここではgモードが使用されていることに注意してください
返品(s.交換
) (テスト
function(Regstr,$1,$2,$3,newstrObj) {
return(("
" + Regstr +"
" + ($1-32) * 1/2) + "C" +"
" + //次の 2 行を置き換えます
$2 +"
" + $3 +"
" + newstrObj +"
" }
)
);
}
document.write(f2c("水:32.2F、油:20.30F。"));

出力結果:
Water: //正規表現に一致しない文字は独自の文字として出力します
32.2F //正規表現 Regstr
に一致する最初の文字列の元の文字列 0.10000000000000142C //正規表現 $1 に一致する最初の文字列の最初のサブパターン マッチングの置換結果 .2 //正規表現に一致する最初の文字列の 2 番目のサブパターン一致の置換結果。ここでは置換しません $2
7 //正規表現 $3 に一致する最初の文字列の最初の部分一致のオフセット 水: 32.2F、油: 20.30F //元の文字列 newsstrObj
and Oil: //正規表現に一致しない文字
20.30F //正規表現に一致する 2 番目の文字列の元の文字列
-5.85C //正規表現と一致する 2 番目の文字列の最初のサブパターンと一致する置換結果
.30 //正規表現に一致する 2 番目の文字列の 2 番目のサブパターン一致の置換結果。ここでは置換しませんでした
22 //正規表現に一致する 2 番目の文字列の最初の部分一致のオフセット
水: 32.2F、油: 20.30F //オリジナルの文字列
。 . //正規表現に一致しない文字
上記のすべての関数パラメータを使用しました。実際には、要件に応じて xxF を xxC に置き換えるだけで済み、それほど多くのパラメータを記述する必要はありません。
例 8:
コードは次のとおりです:

関数 f2c(s) {

var test = /(d+(.d*)?)Fb/g // 華氏温度の可能なモードは次のとおりです: 123F または 123.4F

返品(s.交換
) (テスト
function(strObj,$1) {
return((($1-32) * 1/2) + "C");
}
)
);
}
document.write(f2c("水:32.2F、油:20.30F。"));

出力: 水: 0.10000000000000142C、油: -5.85C。

その他のアプリ:

例9:
コードは次のとおりです:

関数 f2c(s) {

var test = /([d]{4})-([d]{1,2})-([d]{1,2})/;

返品(s.交換
) (テスト
関数($0,$1,$2,$3) {
return($2 +"/" + $1);
}
)
);
}
document.write(f2c("今日: 2011-03-29"));

出力: 今日: 03/2011

分割方法

文字列を部分文字列に分割し、結果を文字列の配列として返します。

stringObj.split([セパレータ[, リミット]])
パラメータ
文字列オブジェクト
必須。分解される String オブジェクトまたはリテラル。オブジェクトは、split メソッドによって変更されません。
区切り文字
オプション。文字列を区切るために 1 つ以上の文字が使用されているかどうかを識別する文字列または正規表現オブジェクト。このオプションを省略した場合、文字列全体を含む単一要素の配列が返されます。
限界
オプション。この値は、返される配列内の要素の数を制限するために使用されます。
説明
Split メソッドの結果は文字列の配列であり、stingObj 内の区切り文字が出現するたびに分割されます。セパレータは配列要素の一部として返されません。
例 10:
コードは次のとおりです:

関数 SplitDemo(){

var s、ss;

var s = "スペインの雨は主に平野部に降ります。";
// 大文字、小文字に関係なく、s で区切られた正規表現。
ss = s.split(/s/i);
リターン(SS);
}
document.write(SplitDemo());

出力: 主に平地に雨が降り、痛みが降りました。

js正規表現exec()メソッド、match()メソッド、search()メソッド

まずコードを見てみましょう:


var sToMatch = "テスト、Tes、tst、tset、テスト、Tesyt、sTes";

var reEs = /es/gi;

アラート(reEs.exec(sToMatch));
アラート(sToMatch.match(reEs));
アラート(sToMatch.search(reEs));

3 つのポップアップ ボックスの内容は次のとおりです:

PHP レギュラーと js レギュラー_PHP チュートリアル

PHP レギュラーと js レギュラー_PHP チュートリアル

PHP レギュラーと js レギュラー_PHP チュートリアル結果は次のように分析されます:

1. RegExp の exec() メソッドには文字列パラメータがあり、配列の最初のエントリが最初に一致し、他のエントリは後方参照になります。したがって、返される最初の結果は、最初に一致する値 es (大文字と小文字は区別されません) です。 www.2cto.com

2. String オブジェクトには match() メソッドがあり、文字列内のすべての一致を含むデータを返します。このメソッドは文字列オブジェクトを呼び出し、それに RegExp オブジェクトを渡します。したがって、2 番目のポップアップ ステートメントは、正規表現に一致するすべての配列を返します。

3. search() の string メソッドは、indexOf() に似ていますが、単なる部分文字列ではなく RegExp オブジェクトを使用します。 search() メソッドは、最初に一致した値の位置を返します。したがって、3 番目に表示されるのは「1」、つまり 2 番目の文字が一致します。 search() メソッドは、グローバル マッチング正規表現 (パラメーター g を使用) をサポートしていないことに注意してください。

作者: wjc19911118

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478072.html技術記事 PHP の正規表現関数 PHP には 2 セットの正規表現関数ライブラリがあります。 1 つのセットは PCRE (Perl 互換正規表現) ライブラリによって提供されます。 PCRE ライブラリは Perl と同じ構文を使用します...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
PHP 拡張子 intl
から 1970-01-01 08:00:00
0
0
0
phpのデータ取得?
から 1970-01-01 08:00:00
0
0
0
PHP GET エラー レポート
から 1970-01-01 08:00:00
0
0
0
phpを上手に学ぶ方法
から 1970-01-01 08:00:00
0
0
0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート