1

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

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

然后我要做的是preg_replace该匹配的结果(并且最终总是返回TL-123- 例如)。

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

编辑

它实际上可能是我需要的preg_match_all 。

4

1 回答 1

1

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

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

这将匹配 aTL后跟任何不是数字(或什么都不是)的内容,然后是数字列表。

您可以将其与 PHP 一起使用,preg_replace()例如:

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

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

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

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

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

于 2012-10-05T17:53:03.230 回答