簡體   English   中英

一位數的正則表達式捕獲兩位數?

[英]Regex for single digit catches two digit numbers?

此正則表達式捕獲兩位數的數字:

如果我有 y11 它仍然會捕獲它,如何僅匹配 y0、y1、y2、y3、y4、y5、y6、y7、y8、y9? 在數字之后可能有一個空格或一個字母或一個點。

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

我會匹配模式y\d(?!\d) ,它匹配y后跟一個數字,它本身后面沒有另一個數字。

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

這打印:

y2
y02

正則表達式的解釋:

y       the letter 'y'
(\d)    a single digit (capture it)
(?!\d)  assert that what follows is either a non digit character OR
        the end of the input

您可以省略{1}並且[1-9]不匹配 0。該模式部分匹配例如y11中的y1 ,因為該模式未錨定。

您可以匹配一個y后跟一個數字,並斷言一個空格、點或字母或字符串的結尾。

\by\K\d(?=[\h\p{L}.]|$)

模式匹配

  • \by匹配 y 前面有一個單詞邊界
  • \K忘記到目前為止匹配的內容
  • \d匹配單個數字 0-9
  • (?=正向前瞻,斷言直接在右邊的是
    • [\h\p{L}.]匹配水平空白字符、任何字母或點
    • | 或者
    • $字符串結尾
  • )關閉前瞻

正則表達式演示| Php 演示

在替換中使用以0開頭的完整匹配

$pattern = "/\by\K\d(?=[\h\p{L}.]|$)/";
$strings = [
    "y0",
    "y1$",
    "y2H",
    "y3.",
    "y9 ",
    "y10",
    "y09  y3 ay9"
];

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

Output

y00
y1$
y02H
y03.
y09 
y10
y09  y03 ay9

使用您顯示的示例,請嘗試以下正則表達式。

^[a-zA-Z]\d[\s.a-zA-Z]?$

或者您想完全匹配從y開始的值,然后將上面更改為:

^y\d[\s.a-zA-Z]?$

上述正則表達式的在線演示

說明:為上述添加詳細說明。

^                   ##Mentioning ^ caret sign to denote starting of value.
[a-zA-Z]            ##Checking 1 alphabet(small/capital letters) here.
\d                  ##Matching 1 single digit here.
[\s.a-zA-Z]?        ##Checking either space OR DOT or small or capital letter to match, this is keep optional.
$                   ##Mentioning end of the value here.
[a-zA-Z]+(\d)([,\sa-zA-Z.]|\b)
  • [a-zA-Z]+匹配一個或多個字符。
  • (\d)匹配單個數字。 將它們添加到捕獲組中以便以后替換。
  • ([,\sa-zA-Z.]|\b)匹配緊跟在這個逗號、空格或單詞邊界或字母之后的文本。
  • 確保也添加$2以在替換時保留其初始表示。

片段:

<?php

$str = 'y0, y1, y2, y03, y4, y5, y6, y7, y8, y9, y99, y101';

$str = preg_replace('/[a-zA-Z]+(\d)([,\sa-zA-Z.]|\b)/','y0$1$2',$str);

echo $str;

這個怎么樣

^y(\d)[A-Za-z\s\.]?$

https://regex101.com/r/FxQA0T/1

或者

^y(\d)[^\d]?$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM