正则表达式(.+?)与(.*)区别

 更新时间:2016年11月25日 15:14  点击:1917
昨天碰到的问题,在BBs问了得出的答应如下./(.+?)b/is 是非贪婪模式 匹配ab /(.*)b/is 是贪婪模式 匹配abb,

昨天碰到的问题,在BBs问了得出的答应如下./(.+?)b/is  是非贪婪模式 匹配ab /(.*)b/is 是贪婪模式 匹配abb,

那么我们来看看基本的符号说明:

*                                0次、1次或多次匹配其前的原子
+                                1次或多次匹配其前的原子
?                                0次或1次匹配其前的原子
.                                匹配除换行之外的任何一个字符

再看看简单的例子:

你测试.+?和.*当然看不出区别了
测试这个字符串看看
'aaa<div style="font-color:red;">123456</div>bbb'
<.+?>会匹配<div style="font-color:red;">和</div>
<.*>会匹配<div style="font-color:red;">123456</div>

最后看看高手怎么说的.

(.+)默认这是贪婪匹配
贪婪是先看整个字符串是否匹配, 如果不匹配,它会去掉字符串的最后一个字符, 并再次尝式, 如果还不匹配, 那么再去掉当前最后一个, 直到发现匹配或不剩任何字符.
过程大概这样:
$str='abcdabceba'
/.+b/  // 匹配一个或多个任意字符后面跟一个字母 b

第一次(先看整个字符串是否是一个匹配) abcdabceba 不匹配,然后去掉最后一个字符 a
第二次(去掉最后一个字符后再匹配) abcdabceb  正确退出

惰性是从左侧第一个字符开始向右匹配, 先看第一个字符是不是一个匹配, 如果不匹配就加入下一个字符再尝式匹配, 直到发现匹配...
过程大概这样
$str='abcdabceba'
/.+?b/ // 同样匹配一个或多个任意字符后面跟一个字母 b

第一次(读入左侧第一个字符) a 不匹配加一个再式
第二次 ab  匹配记录下来,继续(如果匹配所有的话,比如 preg_match_all, 或preg_replace, 不是所有到这儿就停了
第三次 c
...
cdab  匹配记录下来,继续
...
ceb  匹配记录下来,继续

a 到最后了没有了退出


简单例子:
<?php
//这里因为没有用all, .+?只匹配一次

        
$str='abcdabceba';
        
preg_match('/.+b/', $str, $s);
        echo
$s[0]; // abcdabceb
        
        
echo"   ";
        
preg_Match('/.+?b/', $str, $s);
        echo
$s[0]; // ab
        
        
echo"   ";
        
preg_Match('/.+b/U', $str, $s); //等同于 /.+?b/
        
echo $s[0]; //ab
?>

php fopen可以读取文件,打开文件,它还可以读取远程服务器的文件哦.

php fopen实例教程

在过去的教训,我们使用的功能打开,以创建一个新的文件。在这一课,我们将进入的细节,这一重要职能,看看它提供。


PHP的-不同的方式来打开一个文件
对于许多不同的技术原因, PHP的要求您指定您的意图当你打开一个文件。下面是三个基本的方式打开一个文件和相应的字符, PHP使用。
Read: 'r'
打开一个文件的只读使用。该文件指针开始在前面的文件。

Write: 'w'
打开一个文件写入只能使用。此外,数据文件删除,你将开始写入数据的开头的文件。这也是所谓截断一个文件,我们将谈论更多的在以后的教训。该文件指针开始启动的文件。

Append: 'a'

打开一个文件写入只能使用。但是,这些数据在档案中保存,你开始写入数据将结束时的档案。该文件指针开始文件的末尾。

文件指针是PHP的方式记住它的位置在一个文件中。当您打开一个文件进行读取,该文件指针开始启动的文件。这是有道理的,因为你通常会读数据从前面的档案。

然而,当您打开一个附加档案,文件指针是在文件的末尾,你最有可能将附加数据文件的末尾。当您使用读写功能,他们开始在指定的位置的文件指针。

PHP的-解读不同类型的打开
这三个基本方法打开一个文件有不同的目的。如果你想获取信息的一个文件,比如寻找一个电子图书的出现的“奶酪” ,那么你将打开该文件为只读。

如果你想写一个新的文件,或者覆盖现有文件,然后你想打开文件的“瓦特”选项。这将清除干净所有现有的数据文件。

如果您希望将最新的为了您的“ orders.txt ”文件,那么你想打开它附加上的数据进行到底。这将是“一个”选项。

PHP的-打开文件:高级
还有其他的方式打开一个文件。首先我们的标准如何打开一个文件。不过,您可以打开一个文件的方式阅读和写作是允许的!这种组合是由放置一个加号“ + ”后的档案模式的特点。

Read/Write: 'r+'

打开一个文件,以便它能够读取和写入。该文件指针是在年初的文件。

  • Write/Read: 'w+'
    这正是同为r + ,但它会删除所有资料,档案时,文件被打开。

    Append: 'a+'
    这正是同为r + ,但文件指针是在文件的末尾。

    PHP的-打开文件:饼干刀
    以下是正确的形式打开一个用PHP文件。改为( x )的一个选项,上面(即得瓦特,一个等等) 。
  • $ourFileName = "testFile.txt";
    $fh = fopen($ourFileName, 'X') or die("Can't open file");
    fclose($fh);
  • 在php有两种常用的数据获取方法一种是$_get形式的一种是$_POST形式的,前者一般用于小量数据如地址栏a.php?id=1而后者post用下表单数据处理.

    我们使用的HTML格式和发送的PHP网页进行处理。在这一教训,我们选择了使用方法后提交,但我们也可以选择获得的方法。这一教训将审查转让双方的方法。

    php post用法.
    在我们的PHP形式教训我们使用后的方法。这是有关线的HTML代码看上去像这样:

    <form action="process.php" method="post">
    <select name="item">
    ...
    <input name="quantity" type="text" />

    此HTML代码中指定的表格数据将提交给“ process.php ”网页使用POST方法。在PHP的方式,这是商店所有的“张贴”的价值观成为一个关联数组所谓“的$ _POST ” 。一定要通知的姓名表单数据的名称,因为它们代表的关键在“的$ _POST ”关联数组。

    现在,你知道联想阵列, PHP代码,由“ process.php ”应作出litte更有意义。

    $quantity = $_POST['quantity'];
    $item = $_POST['item'];

    名称的形式被用来作为密钥的关联数组,所以一定要永远有两个项目的投入在您的HTML形式,具有相同的名称。如果你这样做,那么您可能会看到出现的一些问题。

    PHP get
    正如我们前面提到的替代方法后获得。如果我们要改变我们的HTML表单的获得方法,它将看起来就像这样:

    <form action="process.php" method="get">
    <select name="item">
    ...
    <input name="quantity" type="text" />

    他将以下面这种形式传递参数.

    "?item=##&quantity=##"

    php读取方式

    $quantity = $_GET['quantity'];
    $item = $_GET['item'];

    get与post的方法各有所长,

    PHP Do While 循环语句与while有一定的区别,它们的区别就是do while不管条件是否为真都会先执行一下,而while必须为真才会执行一次.

    PHP Do While 循环语句与while有一定的区别,它们的区别就是do while不管条件是否为真都会先执行一下,而while必须为真才会执行一次.

    一个“dol while ”循环是略加修改版本的while循环。如果您recal从一个以前的经验教训虽然循环的条件语句是检查回来真正的代码然后在while循环执行。如果有条件的声明是虚假的代码然后环路内不执行的。


    在另一方面,这样做, while循环总是执行它的代码块至少一次。这是因为,有条件的声明是不检查后才载代码已被处决。

    PHP的-while循环和不循环的对比,而
    一个简单的例子,说明之间的差异这两个环路类型是一个有条件的声明,始终是虚假的。首先, while循环

    $cookies = 0;
    while($cookies > 1){
    echo "Mmmmm...I love cookies! *munch munch munch*";
    }

    没有输出.

    我来再来看看 do while 语句.

    $cookies = 0;
    do {
    echo "Mmmmm...I love cookies! *munch munch munch*";
    } while ($cookies > 1);

    输出就是.

    Mmmmm...I love cookies! *munch munch munch

     

    PHP中的 For Each是用来遍历数组的,foreach 的作用我们来看看吧.

    假设你有一个关联数组要迭代通过。 PHP提供一种简单的方式,利用一切要素的阵列与foreach语句。


    浅白英文本声明将做到以下几点:

    对于每个项目在指定的阵列执行此代码。
    虽然在回路和while循环将继续下去,直到某些条件失败,对于每个环路将继续下去,直到它已经历了每一个项目的阵列。

    PHP For Each 实例

    我们有一个关联数组存储姓名的人在我们公司的钥匙的价值观正在他们的年龄。我们想知道大家是老在工作,所以我们使用Foreach循环打印出每个人的姓名和年龄。

    $employeeAges;
    $employeeAges["Lisa"] = "28";
    $employeeAges["Jack"] = "16";
    $employeeAges["Ryan"] = "35";
    $employeeAges["Rachel"] = "46";
    $employeeAges["Grace"] = "34";

    foreach( $employeeAges as $key => $value){
    echo "Name: $key, Age: $value <br />";
    }

    的语法foreach语句是什么奇怪的,所以让我们谈论一些。

    Foreach语法: $key= “ $value
    这个疯狂的声明大致转化为:对于每个元素美元employeeAges关联数组我要提到的关键的关键美元和价值美元的价值。

    运营商“ = ” “代表之间的关系的一个关键和价值。你可以想像,关键点= “的价值。在我们的例子中,我们命名美元的关键的关键和价值$价值。但是,也许更容易把它当作$ $名称和年龄。下面我们的榜样,这和通知如何输出是相同的,因为我们不仅改变了变量名称,指的钥匙和价值观。

    $employeeAges;
    $employeeAges["Lisa"] = "28";
    $employeeAges["Jack"] = "16";
    $employeeAges["Ryan"] = "35";
    $employeeAges["Rachel"] = "46";
    $employeeAges["Grace"] = "34";

    foreach( $employeeAges as $name => $age){
    echo "Name: $name, Age: $age <br />";
    }

    [!--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