我正在尝试使用 preg_match 仅提取数字。我已经尝试了以下代码,但它不起作用。任何想法如何只获得号码?
preg_match_all('/^[0-9]+$/i', '<userinfo>Jsome text here 16586 more text here.</userinfo>', $result);
我正在尝试使用 preg_match 仅提取数字。我已经尝试了以下代码,但它不起作用。任何想法如何只获得号码?
preg_match_all('/^[0-9]+$/i', '<userinfo>Jsome text here 16586 more text here.</userinfo>', $result);
您的正则表达式不应包含^
and$
符号,因为它们表示字符串的开头和结尾,字符串中间不存在。
把它们拿出来,正则表达式应该可以正常工作。
该符号^
指定行的开始和$
- 行的结束。所以你的 RegExp 完全错误。你应该写
preg_match_all('/\d+/', '<userinfo>Jsome text here 16586 more text here.</userinfo>', $result);
此外,您不需要指定i
修饰符,这意味着使用忽略大小写模式进行搜索。
你已经在你的正则表达式中 使用了^
和。表示匹配字符串的开头,表示匹配字符串的结尾。因此,您编写了一个正则表达式来匹配仅包含数字的字符串;即您的正则表达式表示字符串的开头,然后是数字,然后是字符串的结尾。删除这些字符,您将能够匹配一个数字。$
^
$
你有没有尝试过?
preg_match_all('[0-9]+', '<userinfo>Jsome text here 16586 more text here.</userinfo>', $result);
这是您应该使用的正则表达式:
/<userinfo>.*?(\d+).*?<\/userinfo>/
这将匹配
<userinfo>Jsome text here 16586 more text here.</userinfo>
返回数组的第二个元素 ( array[1]
) 将具有您需要的数字。(16586)