正则表达式在网络编程中的运用

 更新时间:2016年11月25日 15:16  点击:1973

导读:
正则表达式在网络编程中的运用

[前言:]在我们编写WEB程序时,经常会判定一个字符串的有效性,如;一个串是否是数字、是否是有效的Email地址等等。假如不使用正则表达式,那么判定的程序会很长,并且轻易出错,假如使用正则表达式,这些判定就是一件很轻松的工作了。本文全面介绍正则表达式的慨念、格式。并以在PHP、ASP中的应用实例增加读者的感性熟悉。正则表达式的应用很广,需要大家在学习和实践中不断的总结。

正则表达式简介
简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。在网络编程中应用广泛,如PHP脚本语言或是JavaScript、VBScript这样的客户端脚本语言都提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。

正则表达式可以让用户通过使用一系列的非凡字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。

举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确,假如通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,假如用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判定中具有举足轻重的作用。在后面我们会举例具体介绍。

正则表达式形式一般如:/love/,其中位于"/"定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入"/"定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的"元字符"。所谓元字符就是指那些在正则表达式中具有非凡意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。较为常用的元字符包括: " ,"*,?以及{}",或者"s,S,d,w和W"等等。为了能够方便用户更加灵活的设定匹配模式,正则表达式答应使用者在匹配模式中利用[]界定匹配于某一个范围的字符而不局限于具体的字符。

除了我们以上的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。较为常用的定位符包括: "^", "$", "b" 以及 "B"。

假如我们希望在正则表达式中实现类似编程逻辑中的"或"运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 "|"。例如: 正则表达式中还有一个较为常用的运算符,即否定符 "[^]"。与我们前文所提到的定位符 "^" 不同,否定符 "[^]"规定目标对象中不能存在模式中所规定的字符串。一般来说,当"^"出现在 "[]"内时就被视做否定运算符;而当"^"位于"[]"之外,或没有"[]"时,则应当被视做定位符。

最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符""。例如:/Th*/,该正则表达式将会与目标对象中的"Th*"而非"The"等相匹配。

正则表达式的语法规则和标记
现在我们正式进入则表达式的学习,我会根据实例结合讲解正则表达式的用法,看完后你就会觉得写UBB代码如此简单了,只要你一步一步的跟着我学 看完本文章后你就成为UBB高手了。激动人心的就是你能写出自已的UBB标签来了,再也不用到别人那里去拷贝现成的代码和模板了。 还好VBScritp5.0给我们提供了"正则表达式"对象,只要你的服务器安装了IE5.x,就可以运行了.

字符描述:

^符号匹配字符串的开头。例如:
^abc 与"abc xyz"匹配,而不与"xyz abc"匹配

$符号匹配字符串的结尾。例如:
abc$ 与"xyz abc"匹配,而不与"abc xyz"匹配。

注重:假如同时使用^符号和$符号,将进行精确匹配。例如:
^abc$ 只与"abc"匹配 

*符号匹配0个或多个前面的字符。例如:
ab* 可以匹配"ab"、"abb"、"abbb"等

符号匹配至少一个前面的字符。例如:
ab  可以匹配"abb"、"abbb"等,但不匹配"ab"。

?符号匹配0个或1个前面的字符。例如:
ab?c? 可以且只能匹配"abc"、"abbc"、"abcc"和"abbcc"

.符号匹配除换行符以外的任何字符。例如:
(.)  匹配除换行符以外的所有字符串

x|y匹配"x"或"y"。例如:
abc|xyz 可匹配 "abc"或 "xyz",而"ab(c|x)yz"匹配 "abcyz"和"abxyz"

{n}匹配恰好n次(n为非负整数)前面的字符。例如:
a{2} 可以匹配"aa",但不匹配"a"

{n,}匹配至少n次(n为非负整数)前面的字符。例如:
a{3,} 匹配"aaa"、"aaaa"等,但不匹配"a"和"aa"。

介绍:

  我们可以通过程序来显示当前的数据。

  注重的两点:1.必须把下列代码放到扩展名为.PHP的文件中;2.在你的服务器上运行代码时,你的服务器必须支持MYSQL数据库。

  代码如下:

  下列代码放到你想显示信息的地方。

<?php

//EDIT THIS

$server = "localhost";

$db_user = "database username";

$db_pass = "database password";

$database = "database";

$timeoutseconds = 300;

//STOP EDITING

$timestamp = time();

$timeout = $timestamp-$timeoutseconds;

mysql_connect($server, $db_user, $db_pass);

$insert = mysql_db_query($database, "INSERT INTO useronline VALUES

('$timestamp','$REMOTE_ADDR','$PHP_SELF')");

if(!($insert)) {

print "Useronline Insert Failed > ";

}

$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");

if(!($delete)) {

print "Useronline Delete Failed > ";

}

$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'");

if(!($result)) {

print "Useronline Select Error > ";

}

$user = mysql_num_rows($result);

mysql_close();

if($user == 1) {

print("$usern");

} else {

print("$usern");

}

?>

  最后在MYSQL中修改你的 username 和 passwords

PHP,作为命令行工具,它对于 Web 页面来说一直都非常可靠。
  当然,只是可以 在命令行中使用 PHP 当然不是这样做的最佳理由。但是,在开始以这种方式用 PHP 进行试验时可能很快就会发现调试现有脚本将变得前所未有地简单。由主要输出和极少逻辑组成的 PHP 程序都将变得令人难以置信地简单。除此之外,还可以使用所有 PHP 知识来完成以前从未想过使用 PHP 完成的任务。事实上,确实没有任何事能阻止您使用 PHP 作为几乎所有给定编程项目的全能王。

  安装

  安装十分简单扼要,它甚至可能都不需要非凡安装任何内容。开始时先在命令行中尝试一个简单的 PHP 脚本。您可以使用现有 PHP 脚本,也可以尝试使用以下代码。本例是基于 Linux 的,但是类似的原理也适用于其他系统。

  首先,确认 PHP 可执行文件的位置

想必很多人都对正则表达式都头疼.今天,我以我的熟悉,加上网上一些文章,希望用常人都可以理解的表达方式.来和大家分享学习经验.

  开篇,还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明

  "^The": 开头一定要有"The"字符串;
  "of despair$": 结尾一定要有"of despair" 的字符串;

  那么,
  "^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配
  "notice": 匹配包含notice的字符串

  你可以看见假如你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边
  接着,说说 '*', ' ',和 '?',
  他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:
  "zero or more"相当于{0,},
  "one or more"相当于{1,},
  "zero or one."相当于{0,1}, 这里是一些例子:

  "ab*": 和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串("a", "ab", "abbb", 等);
  "ab ": 和ab{1,}同义,同上条一样,但最少要有一个b存在 ("ab", "abbb", 等.);
  "ab?":和ab{0,1}同义,可以没有或者只有一个b;
  "a?b $": 匹配以一个或者0个a再加上一个以上的b结尾的字符串.
  要点, '*', ' ',和 '?'只管它前面那个字符.
  你也可以在大括号里面限制字符出现的个数,比如

  "ab{2}": 要求a后面一定要跟两个b(一个也不能少)("abb");
  "ab{2,}": 要求a后面一定要有两个或者两个以上b(如"abb", "abbbb", 等.);
  "ab{3,5}": 要求a后面可以有2-5个b("abbb", "abbbb", or "abbbbb").

  现在我们把一定几个字符放到小括号里,比如:
  "a(bc)*": 匹配 a 后面跟0个或者一个"bc";
  "a(bc){1,5}": 一个到5个 "bc."

  还有一个字符 '│', 相当于OR 操作:

  "hi│hello": 匹配含有"hi" 或者 "hello" 的 字符串;
  "(b│cd)ef": 匹配含有 "bef" 或者 "cdef"的字符串;
  "(a│*c": 匹配含有这样多个(包括0个)a或b,后面跟一个c 的字符串;

  一个点('.')可以代表所有的单一字符,不包括"n"

  假如,要匹配包括"n"在内的所有单个字符,怎么办?
  对了,用'[n.]'这种模式.

  "a.[0-9]": 一个a加一个字符再加一个0到9的数字
  "^.{3}$": 三个任意字符结尾 .

  中括号括住的内容只匹配一个单一的字符

  "[ab]": 匹配单个的 a 或者 b ( 和 "a│b" 一样);
  "[a-d]": 匹配'a' 到'd'的单个字符 (和"a│b│c│d" 还有 "[abcd]"效果一样); 一般我们都用[a-zA-Z]来指定字符为一个大小写英文
  "^[a-zA-Z]": 匹配以大小写字母开头的字符串
  "[0-9]%": 匹配含有 形如 x% 的字符串
  ",[a-zA-Z0-9]$": 匹配以逗号再加一个数字或字母结尾的字符串

  你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^' 作为开头 "%[^a-zA-Z]%" 匹配含有两个百分号里面有一个非字母的字符串.

要点:^用在中括号开头的时候,就表示排除括号里的字符


  为了PHP能够解释,你必须在这些字符面前后加'',并且将一些字符转义.

  不要忘记在中括号里面的字符是这条规路的例外

// 本函数从源文件取出图象,设定成指定大小,并输出到目的文件
// 源文件格式:gif,jpg,,png
// 目的文件格式:jpg
// $srcfile: 源文件
// $dstfile: 目标文件
// $dstW: 目标图片宽度
// $dstH: 目标文件高度
function makethumb($srcFile,$dstFile,$dstW,$dstH) {
$data = GetImageSize($srcFile,&$info);
switch ($data[2]) {
case 1:
$im = @ImageCreateFromGIF($srcFile);
break;
case 2:
$im = @imagecreatefromjpeg($srcFile);
break;
case 3:
$im = @ImageCreateFromPNG($srcFile);
break;
}
$srcW=ImageSX($im);
$srcH=ImageSY($im);
$ni=ImageCreate($dstW,$dstH);
ImageCopyResized($ni,$im,0,0,0,0,$dstW,$dstH,$srcW,$srcH);
ImageJpeg($ni,$dstFile);
// 假如需要输出到浏览器,那么将上一句改为ImageJpeg($ni);
// 假如需要其它格式的图片,改动最后一句就可以了
}

[!--infotagslink--]

相关文章

  • PHP正则表达式取双引号内的内容

    取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
  • 一个关于JS正则匹配的踩坑记录

    这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • php 验证只能输入汉字、英语、数字的正则表达式

    正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • 常用的日期时间正则表达式

    常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25
  • PHP正则表达式匹配验证提取网址URL实例总结

    网址规则是可寻的,所以我们可以使用正则表达式来提取字符串中的url地址了,下面一起来看看小编整理的几个PHP正则表达式匹配验证提取网址URL实例. 匹配网址 URL 的...2016-11-25
  • 正则表达式中两个反斜杠的匹配规则详解

    这篇文章主要介绍了正则表达式中两个反斜杠的匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • JS中使用正则表达式g模式和非g模式的区别

    这篇文章给大家详细介绍了JS中使用正则表达式g模式和非g模式的区别,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2017-04-03
  • JavaScript利用正则表达式替换字符串中的内容

    本文主要介绍了JavaScript利用正则表达式替换字符串中内容的具体实现方法,并做了简要注释,便于理解。具有一定的参考价值,需要的朋友可以看下...2017-01-09
  • C#正则表达式使用方法示例

    这篇文章主要介绍了C#正则表达式使用方法,大家参考使用...2020-06-25
  • JS基于正则截取替换特定字符之间字符串操作示例

    这篇文章主要介绍了JS基于正则截取替换特定字符之间字符串操作方法,结合具体实例形式分析了JS基于正则实现针对特殊字符、数字等字符串类型的截取操作相关技巧,需要的朋友可以参考下...2017-02-08
  • 常用C#正则表达式汇总介绍

    c#正则表达式,用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。...2020-06-25
  • 一文秒懂python正则表达式常用函数

    这篇文章主要介绍了python正则表达式常用函数及使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • Idea使用正则表达式批量替换字符串的方法

    这篇文章给大家介绍了Idea使用正则表达式批量替换字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-07-21
  • js正则学习小记之匹配字符串字面量

    关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配,因为我想学完之后写个语法高亮练手,所以用js代码当作例子...2021-05-07
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • C# 中使用正则表达式匹配字符的含义

    正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧...2020-06-25
  • Python验证的50个常见正则表达式

    这篇文章主要给大家介绍了关于利用Python验证的50个常见正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-11
  • C#编程自学之运算符和表达式

    这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。...2020-06-25