gpt4 book ai didi

php - 正则表达式:如何匹配不以特定字符结尾的单词

转载 作者:可可西里 更新时间:2023-11-01 13:45:53 24 4
gpt4 key购买 nike

我想匹配整个“单词”——以数字字符开头并且可能包含特殊字符但不以“%”结尾的单词。

匹配这些:

  • 112(整数)
  • 10-12(范围)
  • 11/2(分数)
  • 11.2(十进制数)
  • 1,200(千位分隔符)

但不是

  • 12%(百分比)
  • A38(以字母字符开头的单词)

我试过这些正则表达式:

(\b\p{N}\S)*)

但在“12%”中返回“12%”

(\b\p{N}(?:(?!%)\S)*)

但在“12%”中返回“12”

我可以对忽略 %\S 术语进行异常(exception)处理吗?还是必须做其他事情?

我将在 PHP 中使用它,但只需按照您的意愿编写,我会将其转换为 PHP。

最佳答案

这符合您的规范:

\b\p{N}\S*+(?<!%)

解释:

\b       # Start of number
\p{N} # One Digit
\S*+ # Any number of non-space characters, match possessively
(?<!%) # Last character must not be a %

possessive quantifier \S*+ 确保正则表达式引擎不会回溯到它已经匹配的非空格字符的字符串。因此,它不会“返回”% 以在 12% 内匹配 12

当然,这也将匹配 1!abc,因此您可能希望比 \S 更具体,它匹配任何非空白字符。

关于php - 正则表达式:如何匹配不以特定字符结尾的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8181383/

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