php - 匹配带有 1 个或多个尾随子字符串的字符串
问题描述
我有这样的输入
[d/D/d1/d2/d3/d4/d5/d6/d7/D1/D2/D3/D4/D5/D6/D7]+[\.]+[r1/r2/r3/r4/r5/r6/R1/R2/R3/R4/R5/R6]+[\.]+[number 1 to 37]+[#]+[number 0 - 9 ]
一个例子是“d2.r1.4#100.37#1.9#2.3#1(可以有尽可能多的 1-37 # 0-9 根据需要)”
我如何编写一个正则表达式匹配,它可以允许字符串的最后一部分是动态的(根据输入的需要匹配尽可能多的组)
我试过这个表达:
[dD1-7]+\.[rR1-5]+\.
而且我不确定如何匹配“d2.r1”之后的动态组。部分。
解决方案
假设您只需要验证字符串(而不是捕获/提取特定子字符串),以下模式提供与 Emma 的答案相同的结果,但语法更严格。
i
模式修饰符意味着您只需将两个字母写成小写。我不使用任何多余的非捕获组。两个字符的字符类不需要连字符。 \d
是更短的表达方式[0-9]
。
将最终/重复字符括在括号中然后写入*
意味着括号中的序列可以重复零次或多次。
代码:(演示)
$inputs = [
'd2.r1.4#100.37#1.9#2.3#1',
'd2.r1.4#100.37#1.9#2.38#1.8#22',
'd2.r1.4#100.37#1.9#2.3#1.12#2.30#2',
];
$pattern = '/^d[1-7]\.r[1-6](?:\.(?:3[0-7]|[12]\d|[1-9])#\d+)*$/i';
foreach ($inputs as $input) {
echo "\n{$input}: ";
var_export((bool)preg_match($pattern, $input));
}
输出:
d2.r1.4#100.37#1.9#2.3#1: true
d2.r1.4#100.37#1.9#2.38#1.8#22: false
d2.r1.4#100.37#1.9#2.3#1.12#2.30#2: true
推荐阅读
- javascript - 在经典 asp 中下载 zip 文件时,我收到“文件正在被另一个进程错误使用”
- ios - 无效的架构 Xcode 10
- elasticsearch - Elasticseach 多个索引建议
- authentication - 在地址栏中键入时,Vue Router Guards 不会阻止受保护的路由
- qt - Is there a way to simplify the qresource file descriptors?
- excel - [Excel]添加了来自不同工作簿的工作表,仍然出现“更新值”对话框
- python - python:AttributeError: 'GameStats' 对象没有属性 'click_first'
- asp.net-core - .Net Core Web API 项目中的 Hangfire 仪表板
- javascript - Correctly usage of vars in javascript
- javascript - 在 expressJS 中,如何创建一个缓存,使多个请求等待同一个承诺