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

php正则表达式匹配第一个和最后一个,php,regex,Php,Regex,我不熟悉正则表达式,希望匹配php中出现的第一个和最后一个术语。例如,在这一行: 查理,玛丽,鲍勃,鲍勃,玛丽,查理,查理,玛丽,鲍勃,鲍勃,玛丽,查理 我只想访问第一个和最后一个“查利”,而不是中间的两个。我如何匹配一个术语的第一次和最后一次出现 谢谢试试这个正则表达式: ^(\w+),.*\1 贪婪的*量词将注意第一个单词(\w+)和该单词的另一个匹配项(\1,第一个分组的匹配项)之间的字符串尽可能大。您需要向正则表达式添加^和$符号 ^-匹配字符串的开头 $-匹配字符串的结尾 在您的

我不熟悉正则表达式,希望匹配php中出现的第一个和最后一个术语。例如,在这一行:

查理,玛丽,鲍勃,鲍勃,玛丽,查理,查理,玛丽,鲍勃,鲍勃,玛丽,查理

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


谢谢

试试这个正则表达式:

^(\w+),.*\1

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

您需要向正则表达式添加
^
$
符号

  • ^
    -匹配字符串的开头
  • $
    -匹配字符串的结尾
在您的情况下,
^charlie
将匹配第一个样本,
charlie$
将匹配最后一个样本。或者,如果您想将两者匹配,则它将是
^charlie | charlie$


有关这些符号的更多详细信息,请参见。

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

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


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

尝试分解字符串

$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];
我知道这可能不是最好的答案,也不是最有效的,但我认为这是你真正开始编程的方式,通过解决更小的问题

祝你好运。

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