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

继上几篇正则表达式相关说明(详情:正则表达式 ),我们今天继续讨论下,它的单行,多行模式使用,及容易出现错误地方。单行,多行模式,都是正则表达式的模式修饰符里面出现的参数。目前常用正则表达式都有该使用选项,如: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开头字符串。(以下是正则表达式,单行多行一起使用)

时间: 2016-06-02

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

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

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

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

php cli模式学习(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.多线程应用 这

python中如何使用正则表达式的非贪婪模式示例

前言 本文主要给大家介绍了关于python使用正则表达式的非贪婪模式的相关内容,分享出来供大家参考学习,下面话不多说了,来一起详细的介绍吧. 在正则表达式里,什么是正则表达式的贪婪与非贪婪匹配 如:String str="abcaxc"; Patter p="ab*c"; 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配.如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c). 非贪婪匹配:就是匹配到结果就好,就少的匹配字符.如上

利用PHP命令行模式采集股票趋势信息

话不多说,下面直接来看实现代码. 主要函数只有一个类实现(stock.class.php): <?php class StockClass{ public $stockId; public function __construct($stockId){ $this -> stockId = $stockId; } private function getUrl(){ return "http://stockpage.10jqka.com.cn/" . $this ->

命令行模式下备份、还原 MySQL 数据库的语句小结

为了安全起见,需要经常对数据库作备份,或者还原.对于 MySQL 而言,最方便的方法可能就是用 phpMyAdmin 的导出.导入功能了,但如果你的数据库体积比较大,作为 Web 应用的 phpMyAdmin 可能会遭遇"超时"而操作失败.所以,学会在命令行模式下备份.还原数据库,还是很有必要的. 1.备份数据库 在 Linux 命令行模式下备份 MySQL 数据库,用的是 mysqldump 命令: 复制代码 代码如下: mysqldump -u mysqluser -p test_

MySQL 设计和命令行模式下建立详解

MySQL 设计和命令行模式下建立详解 系列文章: MySQL 设计和命令行模式下建立详解 C++利用MySQL API连接和操作数据库实例详解 1.数据表的设计 MySQL数据库管理系统(DBMS)中,包含的MySQL中定义数据字段的类型对你数据库的优化是非常重要的.MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 下面以大学熟悉的学生选课管理系统中用到的数据库为例,来设计相应的数据表.主要有三张表:学生表,课程表和选课表. 学生表设计: 字段(Field) 类

python中使用正则表达式的后向搜索肯定模式(推荐)

正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持的语法通常是不常用的部分. 在前面学习了比较多模式,有前向搜索的,也有后向搜索的,有肯定模式的,也有否定模式的.这次再来学习一个,就是后向搜索肯定模式,意思就是说已经扫描过了的字符串,还想后悔去看

对命令行模式与python交互模式介绍

命令行模式与python交互模式 1.在命令行模式下,可以执行 python 进入 Python 交互式环境,也可以执 行 python hello.py 运行一个.py 文件. 2.在 Python 交互式环境下,只能输入 Python 代码并立刻执行. 3.Python 交互式环境会把每一行 Python 代码的结果自动打印出来,但是,直接运行 Python 代码却不会. 例: 在 Python 交互式环境下,输入: >>> 100 + 200 + 300 600 直接可以看到结果