regex - 正则表达式将字符串的所有部分与 `[0-9_]+` 匹配并跳过可选的 `_[a-z0-9]{24}`?
问题描述
正则表达式匹配字符串的所有片段[0-9_]+
并跳过可选_[a-z0-9]{24}
?
例如,
hello word some_stuff other_stuff_607eea770b6d00003d001579 something
应该只捕获/匹配
hello word some_stuff other_stuff something
这是我所拥有的,但它仍然与某些部分相匹配[a-z0-9]{24}
/[a-z]+(_[a-z]+)?(?:[a-z0-9]{24})?/
解决方案
当您在接受的答案的评论中提到 php 时,您也可以使用SKIP FAIL方法:
_[0-9a-z]{24}(*SKIP)(*FAIL)|[a-z]+(?:_[a-z]+)*
在部分情况下,模式匹配:
_[0-9a-z]{24}
匹配_
和 24 次重复范围 0-9a-z(*SKIP)(*FAIL)
上一个匹配不应该是匹配结果的一部分|
或者[a-z]+
匹配 1+ 个字符 az(?:_[a-z]+)*
可选择重复_
和 1+ 字符 az
示例代码
$re = '/_[0-9a-z]{24}(*SKIP)(*FAIL)|[a-z]+(?:_[a-z]+)*/';
$str = 'hello word some_stuff other_stuff_607eea770b6d00003d001579 something';
preg_match_all($re, $str, $matches);
var_export($matches[0]);
输出
array (
0 => 'hello',
1 => 'word',
2 => 'some_stuff',
3 => 'other_stuff',
4 => 'something',
)
推荐阅读
- composer-php - 如何使依赖项使用其依赖项的修补版本?
- c++ - c ++同步队列/线程应用程序在启动时崩溃,没有特定原因
- python - 在 jupyter 笔记本中翻译 matplotlib 绘图轴标签
- arrays - 从另一个对象内部的对象中过滤数据
- javascript - 在 Cloud Functions 中写入 Firestore 时如何使用 SetOptions.merge 和 .set()
- salesforce - Salesforce 公式
- sql-server - 痛苦的缓慢查询,我有什么选择?
- c# - C# How to Pass Anon Class by Reference
- c# - 树莓派上的 Azure 语音 SDK
- laravel - 在子文件夹中部署 Laravel 5.8 - 路由无法正常工作