繁体   English   中英

如何使用PHP的正则表达式获得所有这种模式的出现?

[英]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开头”

看到这个例子https://regex101.com/r/6xbmJk/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM