在 RegEx 中,至少需要一个 a-z 字符,但可选其他字符

In RegEx, require at least one a-z character, but optional other characters

我正在尝试编写一些 需要 至少 一个 a-z 字符的正则表达式,但是它还可以选择包含 0-9_- 个字符。

我最初是从下面开始的,当时所有字符都是可选的,只要它至少包含其中一个:

add_rewrite_rule('for-sale\/([a-z0-9_-]+)\/?$', 'index.php?pagename=for-sale&search_slug=$matches[1]', 'top');

但后来我需要更改它,因此要求 至少 一个 a-z 存在,但其他字符是可选的。

我尝试了下面的方法,但不幸的是,这显然只有在这些其他字符 a-z 字符之后才有效:

add_rewrite_rule('for-sale\/([a-z]+[0-9_-]*)\/?$', 'index.php?pagename=for-sale&search_slug=$matches[1]', 'top');

我需要这些可选字符能够添加到前面,附加到 a-z 个字符之间;如何让他们在前面很容易,但不确定如何让他们在中间。

有干净的方法吗?

您可以将 ([a-z0-9_-]+) 替换为 ([0-9_-]*[a-z][a-z0-9_-]*) 并使用

add_rewrite_rule('for-sale\/([0-9_-]*[a-z][a-z0-9_-]*)\/?$', 'index.php?pagename=for-sale&search_slug=$matches[1]', 'top');

[0-9_-]*[a-z][a-z0-9_-]* 首先匹配零个或多个数字、下划线或连字符,然后匹配一个小写 ASCII 字母(因此,需要至少出现一次),然后匹配零个或多个数字、小写 ASCII 字母、下划线或连字符。