正则表达式大写字母组合

时间:2012-10-05 17:42:27

标签: php regex

对我来说,REGEX是个谜。在搜索SO之后,我确实下载了Espresso并完成了教程,但事情仍然没有为我点击。这可能只是我的特殊需要,但我没有找到任何例子。我想要做的是找到恰好两个特定大写(或小写,混合)的匹配,然后是一串数字。以下是我想要测试的案例:

  • TL123
  • TL 123
  • tl123
  • tl 123
  • TLABC123
  • tlabc123

我接下来要做的是preg_replace该匹配的结果(最终总是返回TL-123 - 例如)。

因此,TL之后的任何字母或数字组合都会返回TL-,反之亦然。朝正确方向的任何推动都会非常有帮助。谢谢!

修改

实际上我可能需要preg_match_all

1 个答案:

答案 0 :(得分:1)

要匹配指定的模式,您可以使用:

TL(?:[^0-9]*)(\d+)

这将匹配TL后跟任何不是数字(或没有)的数据,然后是数字列表。

你可以在PHP的preg_replace()中使用它:

$str = preg_replace('/TL(?:[^0-9]*)(\d+)/i', 'TL-$1', $str);

此示例当然假定TL是您要匹配的确切字符。如果TL只是占位符而您可以匹配任何内容,则可以使用以下内容:

preg_replace('/([a-z]{2})(?:[^0-9]*)(\d+)/i', '$1-$2', $str);

有了这个,我让它硬编码只允许2个字符匹配({2})。如果需要更改,可以将其修改为任何数字。

另外,由于您希望匹配的字符始终为大写,但匹配小写,我建议只在结果周围使用strtoupper()(而不是回调)。< / p>