我是正则表达式的新手,想要匹配php中术语的第一次和最后一次出现。例如在这一行:
“查理,玛丽,鲍勃,鲍勃,玛丽,查理,查理,玛丽,鲍勃,鲍勃,玛丽,查理”我想访问第一个和最后一个“查理”,但不是中间的两个。我将如何匹配术语的第一次和最后一次出现?
感谢
答案 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];
我知道这可能不是最好的答案,也不是最有效的答案,但我认为这是你真正开始编程的方法,解决较小的问题。
祝你好运。