gpt4 book ai didi

php - 正则表达式从最后一个开始提取所有特定长度的数字

转载 作者:行者123 更新时间:2023-12-05 06:09:20 26 4
gpt4 key购买 nike

例如我有数字文本

8.40083897*
S903040058061*
51097653
1.51097653P
0051384034*51384034* 40083897* 40078422**

我需要从这里得到

40083897*
40058061*
51097653
51097653
51384034*
40078422**

所以我使用正则表达式

/([0-9*]{8,10})/

它工作得很好,除了它从左边开始计算数字,如何使用正则表达式从右边开始计数?

So if exist * then start counting from asteriks and length only 9
So if exist ** then start counting from last asteriks and length only 10
So if not exist * then start counting from last digit and length only 8

最佳答案

你可以使用

\d{8}(?!\d)\*{0,2}(?!\*)

参见 regex demo .

详情

  • \d{8} - 任意八位数字
  • (?!\d) - 右边不允许有数字
  • \*{0,2} - 零、一或两个星号
  • (?!\*) - 后面没有另一个星号。

参见 PHP demo :

$s = "8.40083897*\nS903040058061*\n51097653\n1.51097653P\n0051384034*51384034* 40083897* 40078422**\n1.51097653P";
if (preg_match_all('~\d{8}(?!\d)\*{0,2}(?!\*)~', $s, $matches)) {
print_r(array_unique($matches[0]));
}

输出:

Array
(
[0] => 40083897*
[1] => 40058061*
[2] => 51097653
[4] => 51384034*
[7] => 40078422**
)

关于php - 正则表达式从最后一个开始提取所有特定长度的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64846538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com