正则表达式单行、多行模式简介(使用说明)

继上几篇正则表达式相关说明(详情:正则表达式 ),我们今天继续讨论下,它的单行,多行模式使用,及容易出现错误地方。单行,多行模式,都是正则表达式的模式修饰符里面出现的参数。目前常用正则表达式都有该使用选项,如:javascript 正则表达式,一般是:”/正则表达式匹配字符/修饰符“ ,最后一个”/” 后面是修饰符。然后,php也是类似的,c#,python等,一般调用正则表达式的匹配函数,都有一个另外选项的,设置模式。

单行、多行模式容易出现理解错误
为什么说,容易出现理解错误呢,它们英文对应说明是:SingleLine ,MultiLine,刚好是单行、多行意思。因此,很多朋友就会从字面理解里面,得出以下结论:(哈哈、刚刚使用,我也是这些朋友中一员)

1、单行,就是从头到尾匹配,多行就是如果匹配字符串,里面有换行符,就匹配到之前

2、单行跟多行是冲突的,一次只能指定一个选项,不能同时使用

这样来理解其实,很容易就会这样的。我们来看看,官方手册里面怎么说的。

单行、多行模式官方解释

模式符 描述 s(单行) 如果设置了这个修饰符, 模式中的点号元字符匹配所有字符, 包含换行符. 如果没有这个 修饰符, 点号不匹配换行符 m(多行) 目标字符串是由单行字符组成的(然而实际上它可能会包含多行), “行首”元字符(^)仅匹配字符串的开始位置, 而”行末”元字符($)仅匹配字符串末尾。当这个修饰符设置之后, “行首”和”行末”就会匹配目标字符串中任意换行符(\n)之前或之后

通过上面说明,其实这2个修饰符都只是,修改正则表达式常见元字符的匹配范围了。如果加”s”修饰符,元字符”.” 将能够匹配换行符(\n),如果加”m”修饰符,元字符”$”,将只匹配到”\n”字符前;元字符”^”,将匹配到”\n”字符后。我们还是举例说明吧!(下面关于正则表达式?字符,可以看看前面一节:正则表达式(regex) 贪婪模式、懒惰模式使用)

举例,看单行应用

<?php ///读取hao123.com首页 ///并且去掉里面script代码 /** *去掉script标签* * @author chengmo * @copyright http://blog.chacuo.net/ * @param string $content 原字符串 * @param int $style 匹配模式 * @return string */ function remove_script($content,$style=1) { $reg = $style == 1?"%<script.*?>.*?</script>%":"%<script.*?>.*?</script>%s"; return preg_replace($reg,"",$content); } $content = file_get_contents('http://www.hao123.com'); echo remove_script($content);

举例,看多行应用

<?php ///读取hao123.com首页 ///读取meta标签内容 /** *读取meta标签内容* * @author chengmo * @copyright http://blog.chacuo.net/ * @param string $content 原字符串 * @param int $style 匹配模式 * @return string */ function read_meta($content,$style=1) { $reg = $style == 1?"%^<meta.*?/>%":"%^<meta.*?>\s+$%m"; preg_match_all($reg,$content,$arr); return $arr; } $content = file_get_contents('http://www.hao123.com'); var_dump(read_meta($content));

后记:s,m 修饰符只对,几个特殊元字符有改变。如果你正则表达式中没有那几个元字符。开启s,m字符前后将没有什么变化的。对于上面读取hao123.com代码,我们可以继续同时使用s,m模式。如:”%<script.*?>.*?(^currentProfile.*$).*?</script>%sm” ,匹配所有script标签,并且里面js代码,有一行以curentProfile开头字符串。(以下是正则表达式,单行多行一起使用)

时间: 2024-10-13 20:53:45

正则表达式单行、多行模式简介(使用说明)的相关文章

正则表达式单行、多行模式简介(使用说明)_正则表达式

继上几篇正则表达式相关说明(详情:正则表达式 ),我们今天继续讨论下,它的单行,多行模式使用,及容易出现错误地方.单行,多行模式,都是正则表达式的模式修饰符里面出现的参数.目前常用正则表达式都有该使用选项,如:javascript 正则表达式,一般是:"/正则表达式匹配字符/修饰符" ,最后一个"/" 后面是修饰符.然后,php也是类似的,c#,python等,一般调用正则表达式的匹配函数,都有一个另外选项的,设置模式. 单行.多行模式容易出现理解错误 为什么说,容

正则表达式的多行模式与单行模式

测试"多行模式" 测试一 注意:这里样例文本中3eeeee后面没有回车,光标就在e的后面.匹配的结果是3eeeee,如上图的Search Results区中所示. 为什么这里不能匹配1abcde和2abc? 开启多行模式 ^ 可以匹配字符串开头(字符串的开始位置),也可以匹配行的开头(即换行符\n之后的位置) $ 可以匹配字符串结尾(字符串的结束位置), 也可以匹配行的结尾(即换行符\n之前的位置) 关闭多行模式 ^ 只能匹配字符串开头 $ 只能匹配字符串结尾 知识点:\r为回车符,\

正则表达式的多行模式与单行模式图文分析

在Expresso中,测试"多行模式" 测试一 注意:这里样例文本中3eeeee后面没有回车,光标就在e的后面.匹配的结果是3eeeee,如上图的Search Results区中所示. 为什么这里不能匹配1abcde和2abc? 开启多行模式 ^ 可以匹配字符串开头(字符串的开始位置),也可以匹配行的开头(即换行符\n之后的位置) $ 可以匹配字符串结尾(字符串的结束位置), 也可以匹配行的结尾(即换行符\n之前的位置) 关闭多行模式 ^ 只能匹配字符串开头 $ 只能匹配字符串结尾 知

js正则表达式中的单行模式与多行模式实例分析_正则表达式

本文实例分析了js正则表达式中的单行模式与多行模式.分享给大家供大家参考.具体如下: js正则表达式是不支持单行模式的.也就是说,不能把某段内容(有换行),采用模式修正符来处理,使整段内容当成一行来处理. 正则多行替换,需要添加/mg模式增强符. 复制代码 代码如下: <html> <head> <script type="text/javascript"> //正则替换链接,链接有换行 function t1(){  var con = docum

js正则表达式中的单行模式与多行模式实例分析

本文实例分析了js正则表达式中的单行模式与多行模式.分享给大家供大家参考.具体如下: js正则表达式是不支持单行模式的.也就是说,不能把某段内容(有换行),采用模式修正符来处理,使整段内容当成一行来处理. 正则多行替换,需要添加/mg模式增强符. <html> <head> <script type="text/javascript"> //正则替换链接,链接有换行 function t1(){ var con = document.getEleme

RUBY 正则表达式 多行模式下的 换行如何匹配

问题描述 我有一个文件需要用ruby正则表达式替换文件内容如下AAAAAAAAAAAAAAAAAAA            */BBBBBBBBBBBBBBBBBBBBBB             */为什么在多行模式下,用AAAAAAAAAAAAAA.**/ 匹配到的是全部而不是AAAAAAAAAAAAAAAAAAA            */我要如何做才能匹配到?我使用了很多换行的匹配n Z $ 都没有达到目的难道多行模式下,不能匹配换行符吗? 解决方案 这样就行了:s= 'AAAAAAAA

js中正则表达式的全局匹配模式 /g用法详细

 代码如下 复制代码 var str = "123#abc"; var re = /abc/ig; console.log(re.test(str)); //输出ture console.log(re.test(str)); //输出false console.log(re.test(str)); //输出ture console.log(re.test(str)); //输出false      在创建正则表达式对象时如果使用了"g"标识符或者设置它了的glob

php cli模式学习(PHP命令行模式)_php技巧

php_cli模式简介 php-cli是php Command Line Interface的简称,如同它名字的意思,就是php在命令行运行的接口,区别于在Web服务器上运行的php环境(php-cgi, isapi等) 也就是说,php不单可以写前台网页,它还可以用来写后台的程序. PHP的CLI shell脚本适用于所有的PHP优势,使创建要么支持脚本或系统甚至与GUI应用程序的服务端!--注:windows和linux下都支持php_cli模式 PHP-cli应用场景: 1.多线程应用 这

切换ubuntu下图形模式与linux命令行模式

  本文讲述了linux下图形模式与linux命令行模式切换要领.下面将对此执行 细致说明: ctrl+alt+f2 命令行模式 ctrl+alt+f7 图形模式 我安装的是ubuntu版本,其他版本是不是这样没有研究过. 下面是开机要进入linux命令行哪种模式的设定:(我在我装的ubuntu里看了下没有inittab文件,真奇怪) $gedit /etc/inittab 例如,把id:5:initdefault中的5改为3 ,就是linux进入系统时,原来是直接进入x界面模式的,现在就直接进