使用 codeception 仅从 link 中提取数字

Extract only numbers from link with codeception

我有这个 link,我只需要处理那个 link 中的数字。 我将如何提取它们?

我没有找到任何适用于编码解码的答案。

https://www.my-website.com/de/booking/extras#tab-nav-extras-1426

我厌倦了这样的事情。

 $I->grabFromCurrentUrl('\d+');

但是我不会工作

有什么想法吗?

您可以使用parse_url() 解析整个URL,然后提取您最感兴趣的部分。之后,您可以使用正则表达式仅从字符串中提取数字。

$url = "https://www.my-website.com/de/booking/extras#tab-nav-extras-1426";
$parsedUrl = parse_url($url);

$fragment = $parsedUrl['fragment']; // Contains: tab-nav-extras-1426

$id = preg_replace('/[^0-9]/', '', $fragment);

var_dump($id); // Output: string(4) "1426"

使用 preg_match() after parse_url() 的变体:

$url = "https://www.my-website.com/de/booking/extras#tab-nav-extras-1426";

preg_match('/\d+$/', parse_url($url)['fragment'], $id);

var_dump($id[0]);
// Outputs: string(4) "1426"

保持在框架内:

manual 明确表示:

grabFromCurrentUrl

Executes the given regular expression against the current URI and returns the first capturing group. If no parameters are provided, the full URI is returned.

由于您没有使用任何捕获组 (...),因此不会返回任何内容。

试试这个:

    $I->grabFromCurrentUrl('~(\d+)$~');

末尾的$是可选的,它只是声明字符串应该以模式结尾。

另请注意,为方便起见,您通常使用的开始和结束模式定界符 (/) 已替换为代字号 (~) 字符,因为输入字符串很可能包含多个正斜杠。自定义 pattern delimiters are completely standard in regexp, as @Naktibalda pointed it out in .