Php 使用正则表达式查找字符串(作为变量号)
如何在php中找到某些字符串中的数字 例如,将此文本放在页面中,我希望查找Php 使用正则表达式查找字符串(作为变量号),php,regex,Php,Regex,如何在php中找到某些字符串中的数字 例如,将此文本放在页面中,我希望查找 | | | 12345 | | | 或 | | | 354 | | | 我对数字感兴趣,它们总是根据我访问的页面而变化(数字是页面的id,长度为3-5个字符) 所以我唯一能确定的是数字周围的管道 提前感谢。虽然@S.Kablar的建议非常有效,但它使用的语法对初学者来说可能很难 实现目标的更随意的方式如下: $text = 'your input string'; if (preg_match_all('~\|{3}(\
| | | 12345 | | |
或
| | | 354 | | |
我对数字感兴趣,它们总是根据我访问的页面而变化(数字是页面的id,长度为3-5个字符)
所以我唯一能确定的是数字周围的管道
提前感谢。虽然@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"
}
}
正则表达式的细分:
和~
环绕表达式~
代表管道,它是正则表达式中的特殊字符,必须用反斜杠转义\\\124;
说“前面的(管道)必须正好出现三次”{3}
和(
包含一个子模式,以便将其存储在)
$matches[1]
需要一个数字\d
表示“前一个(数字)可以重复,但必须至少有一个实例”+
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(=/code>
它有很多优点
首先,三个没有量词的文本是一个简单的strncmp()c
呼叫此外,每当正则表达式以断言开始时,它都是
天生就比较慢。因此,这是3人最快的比赛
引导管道符号
其次,使用\K
构造排除以前的内容
从组0中匹配。我们不想把这三根管子插进管道里
匹配,但我们确实想匹配他们
编辑
请注意,捕获组结果不会存储在特殊字符串中
缓冲区。
每个组实际上是一个指针(或偏移量)和一个长度。
指针(或偏移量)指向源字符串中的某个位置。
提取特定组字符串时,大括号的重载函数
匹配[#]
使用指针(或偏移量)和长度创建并返回字符串实例。
使用\K
构造只需设置组0指针(或偏移量)
到字符串中表示以下位置的位置:
在\K
构造后匹配
第三,对3个管道符号使用先行断言不会
就下一个匹配而言,使用符号。这
使这些符号可用于下一个匹配。即:
|||999
| |
888| | | |将获得2个匹配项
|||999
||||888
|||
结果是一个仅由数字组成的数组
格式化
\|\|\| # 3 pipe symbols
\K # Exclude previous items from the match (group 0)
\d{3,5} # 3-5 digits
(?= \|\|\| ) # Assertion, not consumed, 3 pipe symbols ahead
使用
(?谢谢,在我学习这个的过程中它会很有用。我检查了你的代码,我认为它会有用。但是字符串对我来说是未知的。谢谢你的解释。到目前为止,我得到了这个解释正则表达式是如何工作的…但是我只知道$text的| | | xxx | | |其中xxx对我来说是未知的。在拥有$text之前…我会在php中获取一个url,searc获取字符串,并找到这6个管道中的内容。最后将其保存在变量$text中。在获得$text后,我想找到数字xd。您的问题是否已解决?如果没有,什么对您不起作用?请缩小问题范围?不,抱歉,没有解决。我将尝试详细解释(对不起我的英语).| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 124你。