$string='letters=ABCD';
我们要匹配"letters="
和字母B
或C
,字符串中的字母可以输入为:
- B
- C级
- 公元前
- CB如何过滤掉A和D并输出结果为字母=BC?
preg_match('/(letters=([BC]+))/', $string,$matches);
- 如果字符串中的字母以字母B或C开头,则此匹配可以过滤掉D
- 字母开始其他字母时不工作
preg_match('/<FORMAT=[A-Z]+[BIU]+/', $string,$matches);
- 结果中未过滤掉A
2条答案
按热度按时间pjngdqdw1#
您可以尝试:
查看在线demo
(?:^letters=|\G(?!^))
-非捕获组,用于匹配输入的开头,如字面上的"letters ="* 或 * Assert上一匹配结尾处的位置,但否定字符串的开头;[BC]*
-0+乘以字母"B"或"C";\K
-重置上报匹配的起始点;[AD-Z]+
-匹配范围"AD-Z"中的1+个大写字母。替换为空字符串:
yh2wf1be2#
如果我正确理解了这个问题,你可以用一个空字符串替换下面正则表达式的每个匹配项。
Demo
这个表达式可以分解如下。