php正则表达式匹配第一个和最后一个

时间:2009-11-11 21:17:11

标签: php regex

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

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

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

感谢

4 个答案:

答案 0 :(得分:2)

如果你知道你正在寻找什么子串(即它不是一个正则表达式模式),而你只是在寻找你的子串的位置,你可以简单地使用它们:

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

strrpos - 查找字符串中最后一次出现的位置

答案 1 :(得分:0)

试试这个正则表达式:

^(\w+),.*\1

贪婪的*量词会注意第一个单词(\w+)与该单词的另一个出现(\1,第一个分组的匹配)之间的字符串是否同样大尽可能。

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:-1)

尝试爆炸字符串。

$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];

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

祝你好运。