如何在php中的某些字符串中找到数字?
例如,在页面中包含此文本,我想找到
|||12345|||
要么
|||354|||
我对这些数字感兴趣,他们总是根据我访问的页面进行更改(数字是页面的ID,长度为3-5个字符)。
所以我唯一知道的就是数字周围的管道。
提前致谢。
答案 0 :(得分:3)
使用此\|\|\|\K\d{3,5}(?=\|\|\|)
有很多好处。
https://regex101.com/r/LtbKfM/1
\K
构造排除了先前的构造
从0组匹配。我们不想得到3个管道
匹配,但我们确实希望匹配它们。修改
请注意,捕获组结果不会存储在特殊字符串中 缓冲区。
每个组实际上都是指针(或偏移)和长度 指针(或偏移量)位于源字符串中的某个位置 当提取特定组字符串时,支撑的重载功能
matches[#]
使用指针(或偏移量)和长度来创建和返回字符串实例 使用\K
构造只需设置组0指针(或偏移)
到字符串中代表
的位置的位置 在\K
构造之后匹配。
999
{||| {1}} |||会得到2场比赛
||| 888
{||||| {1}} |||。结果是一个只有数字的数组。
格式化
999
答案 1 :(得分:0)
虽然@ S.Kablar的建议非常有效,但它使用的语法可能对初学者来说很难。
实现目标的更随意的方法如下:
$text = 'your input string';
if (preg_match_all('~\|{3}(\d+)\|{3}~', $text, $matches)) {
foreach($matches[1] as $number) {
var_dump($number); // prints smth like string(3) "345"
}
}
正则表达式的细分:
~
和~
围绕着表达式\|
代表管道,这是正则表达式中的特殊字符,必须使用反斜杠进行转义{3}
说'之前的(管道)必须正好出现三次' (
和)
附上一个子模式,以便将其存储在$matches[1]
下\d
需要一个数字+
说'前一个(一个数字)可能会重复,但必须至少有一个实例'