一位数的正则表达式捕获两位数?
这个正则表达式捕获两位数的数字:
如果我有 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.图案部分例如匹配y1在y11作为图案是未锚定。
您可以匹配 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