正则表达式单行、多行模式如何使用及简介?

2026-04-30 01:058阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1441个文字,预计阅读时间需要6分钟。

正则表达式单行、多行模式如何使用及简介?

继承了几篇正则表达式相关的内容,今天我们继续讨论。正则表达式的单行和多行模式使用,以及容易出现错误的地方。

单行模式:正则表达式默认是单行模式。在这种模式下,符号如 `^` 和 `$` 分别匹配行的开头和结尾。

多行模式:使用 `re.M` 或 `re.MULTILINE` 标志可以将正则表达式设置为多行模式。在这种模式下,`^` 和 `$` 将匹配任意行的开头和结尾,而不是整个字符串的开头和结尾。

单行模式与多行模式的区别:- 单行模式中,`^` 和 `$` 只匹配行的开头和结尾。- 多行模式中,`^` 和 `$` 匹配任意行的开头和结尾。

容易出现的错误:

1.忘记设置多行模式,导致 `^` 和 `$` 不按预期工作。

2.在单行模式下使用 `^` 或 `$`,期望它们匹配整个字符串的开头和结尾。

3.在正则表达式中遗漏括号,导致分组错误。

4.在正则表达式中使用错误的字符类,如 `[abc]` 应该匹配 `a`、`b` 或 `c`,而不是 `abc`。

总结:

单行和多行模式是正则表达式中的两种重要模式,它们在匹配文本时起到关键作用。正确使用这些模式,并注意常见的错误,可以有效地提高正则表达式的使用效率。

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

举例,看多行应用

<?php ///读取hao123.com首页 ///读取meta标签内容 /** *读取meta标签内容* * @author chengmo * @copyright 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('www.hao123.com'); var_dump(read_meta($content));

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

正则表达式单行、多行模式如何使用及简介?

本文共计1441个文字,预计阅读时间需要6分钟。

正则表达式单行、多行模式如何使用及简介?

继承了几篇正则表达式相关的内容,今天我们继续讨论。正则表达式的单行和多行模式使用,以及容易出现错误的地方。

单行模式:正则表达式默认是单行模式。在这种模式下,符号如 `^` 和 `$` 分别匹配行的开头和结尾。

多行模式:使用 `re.M` 或 `re.MULTILINE` 标志可以将正则表达式设置为多行模式。在这种模式下,`^` 和 `$` 将匹配任意行的开头和结尾,而不是整个字符串的开头和结尾。

单行模式与多行模式的区别:- 单行模式中,`^` 和 `$` 只匹配行的开头和结尾。- 多行模式中,`^` 和 `$` 匹配任意行的开头和结尾。

容易出现的错误:

1.忘记设置多行模式,导致 `^` 和 `$` 不按预期工作。

2.在单行模式下使用 `^` 或 `$`,期望它们匹配整个字符串的开头和结尾。

3.在正则表达式中遗漏括号,导致分组错误。

4.在正则表达式中使用错误的字符类,如 `[abc]` 应该匹配 `a`、`b` 或 `c`,而不是 `abc`。

总结:

单行和多行模式是正则表达式中的两种重要模式,它们在匹配文本时起到关键作用。正确使用这些模式,并注意常见的错误,可以有效地提高正则表达式的使用效率。

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

举例,看多行应用

<?php ///读取hao123.com首页 ///读取meta标签内容 /** *读取meta标签内容* * @author chengmo * @copyright 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('www.hao123.com'); var_dump(read_meta($content));

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

正则表达式单行、多行模式如何使用及简介?