Php 如何用破折号或空格来匹配数字
我目前有以下正则表达式:Php 如何用破折号或空格来匹配数字,php,regex,Php,Regex,我目前有以下正则表达式: preg_match_all('/(\d+)/', $bio, $matches); 这将匹配连续的数字,例如1928371921,但是我还想匹配以下格式的内容 0812-123-1288 或 修改上述正则表达式以处理此类情况的最佳方法是什么 ^\d+(?:[ -]\d+)*$ 看 如果不想验证字符串是否正是此字符串,请删除^和$ 解释 ^锚定声明我们位于字符串的开头 \d+匹配一个或多个数字 非捕获组(?:[-]\d+匹配空格或破折号,后跟一些数字 而*与此零
preg_match_all('/(\d+)/', $bio, $matches);
这将匹配连续的数字,例如1928371921,但是我还想匹配以下格式的内容
0812-123-1288
或
修改上述正则表达式以处理此类情况的最佳方法是什么
^\d+(?:[ -]\d+)*$
看
如果不想验证字符串是否正是此字符串,请删除^
和$
解释
锚定声明我们位于字符串的开头^
匹配一个或多个数字\d+
- 非捕获组
匹配空格或破折号,后跟一些数字(?:[-]\d+
- 而
与此零次或多次匹配*
锚点断言我们在字符串的末尾$
$regex = '~^\d+(?:[ -]\d+)*$~';
if (preg_match($regex, $yourstring, $m)) {
$match = $m[0];
}
您可以使用以下选项:
preg_match_all('/\d+(?:[- ]\d+)*/', $bio, $matches);
str是否替换并删除空格和连字符?或者使用
|
管道符号在preg匹配中分隔条件cal@Ohgodwhy我想使用正则表达式一次性完成,而不使用str替换\b([0-9-]+)\b
将与之匹配,尽管我支持删除无关字符的建议。一致形式变量^\d+(?(?=([-])(?:\1\d+)$
FYI,添加了演示和explanation@hwnd不,我想我是在几秒钟前+1对于精神力量:)但是我们的线交叉了,你的[-]
是我的[-]
!
preg_match_all('/\d+(?:[- ]\d+)*/', $bio, $matches);