[英]How can I get all occurrences of this pattern with the regex of PHP?
如何将模式4321 [5-9] [7-9] {6}的所有出现都放入数组中,但不包括例如值之前或之后有一个数字的出现?
例如,43217999999应该有效,但是1 43217999999(注意开头的数字1 )应该无效。
作为第一个示例,43217999999 1不应有效,因为它最后有1 。
至少对我来说,增加的困难是,我必须解析它在字符串中可以找到的任何位置。
字符串看起来像这样,从字面上看:
5分之4321799999743217999999 // 43217999998 _ 43217999999a43216999999-43216999999 arandomword 43215999999 7
正如您将注意到的那样,它没有标准的分隔值的方法(我用粗体标记了将使其无效的值,因此我不应该将其匹配)
我现在的想法是这样的:
(\D+|^)(4321[5-9][7-9]{6})(\D+|$)
(\\ D + | ^)表示我希望在该位置字符串的开头或至少一个非数字,而(\\ D + | $)表示我希望在那里的字符串结尾或至少一个非数字。
那显然不符合我的脑海。
我也尝试分两个步骤进行操作:
preg_match_all("/\D+4321[5-9][7-9]{6}\D+|4321[5-9][7-9]{6}\D+|4321[5-9][7-9]{6}$/", $input, $outputArray);
接着:
for($cont = 0; $cont < count($outputArray); $cont++) {
preg_match("/4321[5-9][7-9]{6}/", $outputArray[0][$cont], $outputArray2[]);
}
这样我就可以打印
echo "<pre>" . print_r($outputArray2, true) . "</pre>";
但这不能让我排除在值开头之前有数字的数字(例如5 432157999999),然后,我的想法没有任何进展。
在此先感谢您的帮助。
如果您确实想检查比赛前后是否没有数字,可以使用负向前看和向后看。
(?![0-9])
的末尾表示:“不跟0-9” (?<![0-9])
开头表示:“不以0-9开头”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.