使用 preg_replace 和不同格式的正则表达式

Using preg_replace and regex with varying formats

我遇到了三种类型的字符串。我的目标是循环遍历所有这些并得到 name.

page_1.name
page_2.name.text
page_1.name.something

我能想到的唯一方法是先用以下内容删除 page_#

$remove_page = preg_replace("/(page_\d+\.)(\w+)/", "", $string);

然后像这样删除最后一位:

$get_name = preg_replace("/(\w+)(\.\w+)/", "", $remove_page);

有没有更有效的方法来做到这一点?这行得通,但我觉得我只是稍微掌握了正则表达式的力量。

您可以使用这个正则表达式:

preg_match('/(?<=page_\d\.)[^.]+/', $input, $matches);

(?<=page_\d\.) 是一种回顾,确保我们的匹配项 之前 page_ 和一个数字。 [^.]+ 将匹配 1 个或多个不是 DOT 的字符。

RegEx Demo

否则按 DOT 拆分并取第一个元素:

$arr = explode('.', $input);
$name = $arr[1];