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

时间:2018-05-16 21:46:08

标签: php regex pcre

如何将数组4321 [5-9] [7-9] {6}中出现的所有模式都添加到数组中,但不包括例如在值之前有数字的情况,或者紧接着呢?

例如,43217999999应该有效但 1 43217999999(注意开头的数字 1 )应该无效。

作为第一个例子,43217999999 1 不应该是有效的,因为它最终有 1

至少在我看来,增加的难度是我必须在字符串中找到它的任何位置解析它。

字符串看起来像这样:

43217999997 / 5 43217999999 // 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),然后,我没有取得任何进展想法。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果你确实想要检查比赛前后是否有数字,你可以使用负面向前看并向后看。

    最后
  • (?![0-9])表示:“后面没有0-9”
  • (?<![0-9])在开始时表示:“前面没有0-9”

请参阅此示例https://regex101.com/r/6xbmJk/1