Php 正则表达式大写字母组合

Php 正则表达式大写字母组合,php,regex,Php,Regex,正则表达式对我来说有点神秘。在搜索了SO之后,我确实下载了浓缩咖啡,并阅读了教程,但我仍然觉得有些不对劲。这可能只是我的特殊需要,但我还没有找到任何例子。我要做的是找到正好是两个特定大写(或小写,mix)和一个数字字符串的匹配项。以下是我想测试的案例: TL123 tl123 tl123 tl123 TLABC123 tlabc123 然后我尝试做的是匹配的结果(例如,最终总是返回TL-123) 因此,TL之后的任何字母或数字组合都将返回TL-,反之亦然。任何朝正确方向的轻推都会非常有帮助。

正则表达式对我来说有点神秘。在搜索了SO之后,我确实下载了浓缩咖啡,并阅读了教程,但我仍然觉得有些不对劲。这可能只是我的特殊需要,但我还没有找到任何例子。我要做的是找到正好是两个特定大写(或小写,mix)和一个数字字符串的匹配项。以下是我想测试的案例:

  • TL123
  • tl123
  • tl123
  • tl123
  • TLABC123
  • tlabc123
然后我尝试做的是匹配的结果(例如,最终总是返回
TL-123

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

编辑


实际上,这可能是我需要的。

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

TL(?:[^0-9]*)(\d+)
这将匹配一个
TL
,后跟非数字的任何内容(或无),然后是数字列表

您可以将其与PHP的
preg\u 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()
(而不是回调)。

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

TL(?:[^0-9]*)(\d+)
这将匹配一个
TL
,后跟非数字的任何内容(或无),然后是数字列表

您可以将其与PHP的
preg\u 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()
(而不是回调)。

我读了两遍问题,仍然不明白您在问什么。资本化是否重要?“两个特定资本”是什么?您是否希望为上述所有输入返回
TL-123
?TL和这些数字之间是否有空格?如果是这样的话,您还需要什么或最小/最大多少空格?您好-抱歉,如果发现两个字母的组合,大写或小写将返回
TL-
。为了更好地解释它,如果它在任何地方找到
TL
,请将其与
TL-
匹配。我想它需要preg_match_,好吗?我认为它不区分大小写。OP意识到
\i
?@ZathrusWriter理论上TL之后的任何内容都将匹配。TL被用作唯一的标识。我把问题读了两遍,仍然不明白你在问什么。资本化是否重要?“两个特定资本”是什么?您是否希望为上述所有输入返回
TL-123
?TL和这些数字之间是否有空格?如果是这样的话,您还需要什么或最小/最大多少空格?您好-抱歉,如果发现两个字母的组合,大写或小写将返回
TL-
。为了更好地解释它,如果它在任何地方找到
TL
,请将其与
TL-
匹配。我想它需要preg_match_,好吗?我认为它不区分大小写。OP意识到
\i
?@ZathrusWriter理论上TL之后的任何内容都将匹配。TL被用作唯一标识符。因此,使用第二个示例,如果我将
TL
值作为变量传递,它会是:
preg\u replace(/([a-z]{$variable})(?:[^0-9]*)(\d+)/I“,'$1-$2',$str)
The
{2}
指定模式必须重复的次数,在本例中为2次。如果您想使其成为动态的,并且
$VARIABLE='TL'
,您需要将strlen($VARIABLE)传递给正则表达式。如果你知道长度的话,我建议你硬编码。啊,实际上我读错了,所以
TL
是在
preg\u replace('/TL(?[^0-9]*)(\d+)/I',TL-$1',$string)中硬编码的
我想做的是在搜索和替换过程中将
TL
作为一个变量传递进来——所以不是字符的计数,而是字符本身——如果你知道确切的字符只使用
“/{$variable}…”
,其中
是正则表达式的其余部分。Awesome-最终工作正常。非常感谢你的帮助!因此,使用第二个示例,如果我将
TL
值作为变量传递,它会是:
preg\u replace(/([a-z]{$variable})(?:[^0-9]*)(\d+)/I“,'1-$2',$str”)
The
{2}
指定模式必须重复的次数,在本例中为2次。如果您想使其成为动态的,并且
$VARIABLE='TL'
,您需要将strlen($VARIABLE)传递给正则表达式。如果你知道长度的话,我建议你硬编码。啊,实际上我读错了,所以
TL
是在
preg\u replace('/TL(?[^0-9]*)(\d+)/I',TL-$1',$string)中硬编码的
我想做的是在搜索和替换过程中将
TL
作为一个变量传递进来——所以不是字符的计数,而是字符本身——如果你知道确切的字符只使用
“/{$variable}…”
,其中
是正则表达式的其余部分。Awesome-最终工作正常。