如何在数组中获取此模式43215-9{6}的所有出现,但不包括例如,在该值之前或之后有一个数字的事件?
例如,43217999999应该是有效的,但是143217999999 (请注意开头的数字1 )不应该有效。
作为第一个例子,432179999991不应该有效,因为它最终具有1。
另外的困难,至少对我来说,是我必须在字符串中找到它的任何位置来解析它。
字符串看起来是这样的,字面意思是:
43217999997 / 543217999999 // 43217999998 _ 43217999999a43216999999-43216999999芳香词43217999999//43217999998_43217999999a43216999999
正如您所注意到的,它没有分离值的标准方法(我用粗体标记了会使其无效的值,因此不应该匹配这些值)。
我现在的想法是:
(\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>";
但这并不排除那些在值(5432157999999开始之前就有数字的(例如),然后,我的想法没有取得任何进展。
提前感谢您的帮助。
发布于 2018-05-16 22:10:46
如果你真的想检查比赛前后是否没有数字,你可以使用否定的,向前看,然后回头看。
(?![0-9])
结尾的意思是:“不是0-9”。(?<![0-9])
开头的意思是:“前面没有0-9”。https://stackoverflow.com/questions/50380375
复制相似问题