匹配未知长度的字符串-我从表单中获取用户的输入。
预期的输入格式为[number][comma][number][comma] etc...
,例如3,43,1,238,24
。
只要输入允许,模式可以继续,任何长度的数字都可以接受。
我想使用正则表达式来确保用户正确地格式化了他们的条目。首先,我使用str_replace去掉响应中的任何空格(以防用户在逗号后面输入空格)。
但是我对如何匹配未知长度的模式感到困惑。下面的操作可行吗?
/'d+,'d+/
我的印象是这行不通。它只匹配模式中的前两个数字,而不匹配后面的数字。什么好主意吗?
如果有关系,我使用PHP v 5.6.10
您可以使用/^'d+(?:,'d+)*$/
之类的东西。这意味着:
^ # beginning of string
'd+ # one or more digits
(?: # group (but don't capture)
, # a comma
'd+ # one or more digits
)* # ... zero or more of this group
$ # end of string
这将像3,43,1,238,24
这样的输入视为"头"(3
)后面跟着(任意多个)逗号-数字对(,43
,1
,238
,24
)。
您可以使用这种模式:/('d+)[^,]?+/gm
由于PHP PCRE没有全局(g)修饰符,您应该删除它并使用preg_match_all()
。
的例子:
$str = '55, 44, 23 , 65 , 99,
234, 5 34,';
preg_match_all('/('d+)[^,]?+/', $str, $matches);
print_r($matches);
希望有帮助!