PHP中的正则表达式帮助(8个十六进制字符后跟下划线)

You*_*ijn 3 php regex preg-match

我想验证我的输入是否包含8个十六进制字符后跟下划线,后跟任意数量的包含任何值的章程.

我目前正在使用以下正则表达式:

preg_match('/^[0-9A-Fa-f]{8}_*/', $value);
Run Code Online (Sandbox Code Playgroud)

但是这个表达式不能满足我的需求,因为它的行为方式如下

结果:

1A345678            (true)
1A345678_add        (true)
1234567890          (true)
ABSDBASDB           (false)
Run Code Online (Sandbox Code Playgroud)

预期结果:

1A345678            (false)
1A345678_add        (true)
1234567890          (false)
ABSDBASDB           (false)
Run Code Online (Sandbox Code Playgroud)

我的正则表达式出了什么问题?

ste*_*ema 8

你只是错过了一个 .

preg_match('/^[0-9A-Fa-f]{8}_.*/', $value);
Run Code Online (Sandbox Code Playgroud)

_*你匹配0或多个下划线.*是一个量词,重复前面的字符或组0次或更多次.因此它也匹配最后没有下划线的字符串(0的重复)

. 是一个正则表达式特殊字符,匹配任何字符(默认情况下除了换行符)