【问题标题】:php regex matching first and lastphp正则表达式匹配第一个和最后一个
【发布时间】:2009-11-11 21:17:11
【问题描述】:

我是正则表达式的新手,想匹配 php.ini 中第一次和最后一次出现的术语。例如在这一行:

“查理,玛丽,鲍勃,鲍勃,玛丽,查理,查理,玛丽,鲍勃,鲍勃,玛丽,查理”

我只想访问第一个和最后一个“charlie”,而不是中间的两个。我将如何匹配一个术语的第一次和最后一次出现?

谢谢

【问题讨论】:

  • 说你想“访问”两个文字字符串有点太含糊了。我的意思是,如果您知道要搜索的字符串,则可以只使用要搜索的单词(无需搜索)。你真的想要他们在字符串中的偏移量吗?你用这些信息做什么?

标签: php regex


【解决方案1】:

如果您知道要查找的子字符串(即,它不是正则表达式模式),并且您只是在查找子字符串的位置,您可以简单地使用这些:

strpos — 查找字符串第一次出现的位置

strrpos — 查找字符串中字符最后出现的位置

【讨论】:

    【解决方案2】:

    试试这个正则表达式:

    ^(\w+),.*\1
    

    贪婪的* 量词将确保第一个单词 (\w+) 和该单词的另一个出现 (\1,第一个分组的匹配) 之间的字符串尽可能大。

    【讨论】:

      【解决方案3】:

      您需要在正则表达式中添加^$ 符号。

      • ^ - 匹配字符串的开头
      • $ - 匹配字符串的结尾

      在您的情况下,^charlie 匹配第一个样本,charlie$ 匹配最后一个样本。或者如果你想同时匹配两者,那么它将是^charlie|charlie$

      有关这些符号的更多详细信息,另请参阅Start of String and End of String Anchors

      【讨论】:

        【解决方案4】:

        尝试分解字符串。

        $names = "charlie, mary,bob,bob,mary, charlie, charlie, mary,bob,bob,mary,charlie";
        $names_array = explode(",", $names);
        

        完成此操作后,您将得到一个包含名称的数组。你想要最后一个,所以它会在位置 0。

        $first = $names_array[0];
        

        最后一个有点棘手。你必须知道你有多少个名字 [count()] 然后,由于数组从 0 开始计数,你必须减去一个。

        $last = $names_array[count($names_array)-1];
        

        我知道这可能不是最好的答案,也不是最有效的,但我认为这是您真正开始编程的方式,通过解决较小的问题。

        祝你好运。

        【讨论】:

          猜你喜欢
          • 2014-08-12
          • 2023-03-03
          • 2012-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-14
          相关资源
          最近更新 更多