使用 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 的字符。
否则按 DOT 拆分并取第一个元素:
$arr = explode('.', $input);
$name = $arr[1];
我遇到了三种类型的字符串。我的目标是循环遍历所有这些并得到 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 的字符。
否则按 DOT 拆分并取第一个元素:
$arr = explode('.', $input);
$name = $arr[1];