首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用PHP的正则表达式获取此模式的所有出现情况?

如何使用PHP的正则表达式获取此模式的所有出现情况?
EN

Stack Overflow用户
提问于 2018-05-16 21:46:07
回答 1查看 61关注 0票数 0

如何在数组中获取此模式43215-9{6}的所有出现,但不包括例如,在该值之前或之后有一个数字的事件?

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

作为第一个例子,432179999991不应该有效,因为它最终具有1

另外的困难,至少对我来说,是我必须在字符串中找到它的任何位置来解析它。

字符串看起来是这样的,字面意思是:

43217999997 / 543217999999 // 43217999998 _ 43217999999a43216999999-43216999999芳香词43217999999//43217999998_43217999999a43216999999

正如您所注意到的,它没有分离值的标准方法(我用粗体标记了会使其无效的值,因此不应该匹配这些值)。

我现在的想法是:

代码语言:javascript
运行
复制
(\D+|^)(4321[5-9][7-9]{6})(\D+|$)

(\D+|^)意思是,我期望在该位置开始字符串或至少一个非数字和(\D+|$)表示,我期望那里的字符串结束或至少一个非数字。

这显然不像我脑海里想象的那样。

我还尝试了两个步骤,第一步:

代码语言:javascript
运行
复制
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);

然后:

代码语言:javascript
运行
复制
for($cont = 0; $cont < count($outputArray); $cont++) {
   preg_match("/4321[5-9][7-9]{6}/", $outputArray[0][$cont], $outputArray2[]);
}

所以我可以打印

代码语言:javascript
运行
复制
echo "<pre>" . print_r($outputArray2, true) . "</pre>";

但这并不排除那些在值(5432157999999开始之前就有数字的(例如),然后,我的想法没有取得任何进展。

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-16 22:10:46

如果你真的想检查比赛前后是否没有数字,你可以使用否定的,向前看,然后回头看。

  • (?![0-9])结尾的意思是:“不是0-9”。
  • (?<![0-9])开头的意思是:“前面没有0-9”。

参见下面的示例https://regex101.com/r/6xbmJk/1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50380375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档