我正在使用PHP解析一封电子邮件,并希望获得特定字符串后的数字。
例如,我想从一个字符串中获取数字033,它看起来像:
Account Number: 033
Account Information: Some text here
内容实际上是HTML,因此输入字符串更准确地表示为:
<font face="Arial, Helvetica, sans-serif" color="#000099"><strong><font color="#660000">Account Number</font></strong><font color="#660000">: 033<br><strong>Account Name</strong>: More text here<br>
总是有单词Account Number:
,然后是数字,然后是换行符。我有:
preg_match_all('!\d+!', $str, $matches);
但这只是得到所有的数字。
4条答案
按热度按时间bfhwhh0e1#
如果数字总是在
Account Number:
之后(包括末尾的空格),那么只需将其添加到正则表达式中:结果如下:
**注意:**如果存在HTML,那么只要你不相信HTML会发生变化,那么它也可以包含在正则表达式中。否则,我建议使用HTML DOM Parser来获取字符串的纯文本版本,并从那里使用正则表达式。
iswrvxsc2#
你不需要使用
preg_match_all()
,你也没有把你的匹配放在一个括号内的反向引用。mrphzbgm3#
以HTML为基础:
我们得到:
ajsxfq5m4#
@montes在使用正则表达式提取目标子字符串之前,适当地调用
strip_tags()
来清理/简化输入文本。然而,该模式可以使用一些改进,假设每个电子邮件只有一个帐号,您不应该使用preg_match_all()
,而是preg_match()
。i
模式修饰符没有意义。^
或$
元字符,因此m
模式修饰符是无用的。.
元字符,因此s
模式修饰符是无用的。\K
重新启动全字符串匹配。这是有益的,因为它消除了使用捕获组的必要性。代码:(Demo)
输出量: