PHP 中的正则表达式赢得了 preg_match

Regex in PHP winth preg_match

我在 PHP 中使用 preg_match 和正则表达式来更改包含以下内容的字符串的路径变量:

“任何字符 - 油漆,1 到 14 之间的旧数字 - 任何字符”

我放了有效字符串的例子:

-油漆,老 12

-油漆,旧 0a

-油漆,老6b

...

我使用过preg_match如下:

if(preg_match("/*paint, old ^([1-9]|1[0-4])*/",$ubicacion))
{
    ...
}
else
{
    ...
}

但它给了我这个错误:preg_match (): 编译失败:在偏移量 0[ 没有可重复的内容=13=]

你知道失败的原因是什么吗?

preg_match (): Compilation failed: nothing to repeat at offset 0 在大多数情况下是由于正则表达式开头存在量词。 正则表达式不能以量词开头,即 /+1//*1//{2,}1//{2,5}1/ 将抛出此错误。

你可以使用

if (preg_match('~\bpaint,\s+old\s+(1[0-4]|[1-9])(?!\d)~i', $string)) {
...
}

参见regex demo and this PHP demo详情:

  • \b - 单词边界
  • paint, - paint, 字符串
  • \s+ - 一个或多个空格 -old - old 字符串
  • \s+ - 一个或多个空格
  • (1[0-4]|[1-9]) - 1 后跟从 04 的数字或非零数字
  • (?!\d) - 后面没有任何其他数字。

请注意,您不需要在开头和结尾添加任何模式来实际使用预期匹配前后的文本,因为您只需要一个布尔结果。

末尾的i使模式匹配不区分大小写。