一位数的正则表达式捕获两位数?

这个正则表达式捕获两位数的数字:

如果我有 y11 它仍然会抓住它,如何只匹配 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9 ?? 在数字之后可能有一个空格或一个字母或一个点。

preg_replace('/y([1-9]{1})/', 'y0$1', $string)

回答

我会匹配 pattern yd(?!d),它匹配y后跟一个数字,它本身后面没有另一个数字。

$string = "y2";
echo $string . "n";
$string = preg_replace("/y(d)(?!d)/", "y0$1", $string);
echo $string;

这打印:

y2
y02
y2
y02

正则表达式说明:


回答

则可以省略{1}[1-9]不匹配0.图案部分例如匹配y1y11作为图案是未锚定。

您可以匹配 ay后跟一个数字并断言空格、点或字母或字符串的结尾。

byKd(?=[hp{L}.]|$)

模式匹配

  • by 匹配 y 前面有一个单词边界
  • K 忘记到目前为止匹配的内容
  • d 匹配单个数字 0-9
  • (?= 正向前瞻,断言直接向右的是
    • [hp{L}.] 匹配水平空白字符、任何字母或点
    • | 或者
    • $ 字符串结束
  • ) 关闭前瞻

正则表达式演示| php 演示

在替换中使用以 a 开头的完整匹配 0

$pattern = "/byKd(?=[hp{L}.]|$)/";
$strings = [
    "y0",
    "y1$",
    "y2H",
    "y3.",
    "y9 ",
    "y10",
    "y09  y3 ay9"
];

foreach ($strings as $s) {
    echo preg_replace($pattern, "0$0", $s) . PHP_EOL;
}

输出

y00
y1$
y02H
y03.
y09 
y10
y09  y03 ay9


以上是一位数的正则表达式捕获两位数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>