gpt4 book ai didi

用于通配符 (*) 搜索的正则表达式

转载 作者:行者123 更新时间:2023-12-03 19:13:04 25 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式,它可以在字符串的开头或结尾有一个通配符 char(*),但不能在其他字符之间。最多允许一个 *。可以有任意数量的其他字符。

有效输入列表:

*
A*
*A
AB*
*AB
A
AB
ABC
1
*1
1*

*12
12*
123

无效输入列表:
**
A**
**A
A*A
*A*
*AB*
*A*B*
1**
**2
*1*
*1*2

我想出了以下正则表达式
^(?!(?:.*\*){2})[a-zA-Z0-9*]+$

它适用于除 A*A 之外的所有条件。我正在尝试修复它,但没有成功。请帮助解决这个问题。

最佳答案

使任何输入无效 *出现在字母之间,您可以添加 (?!.*\b\*\b)展望。 \b\*\b模式匹配 *在单词字符之间(字母、数字或 _)。

因此,您可以使用

^(?!(?:.*\*){2})(?!.*\b\*\b)[*a-zA-Z0-9]+$
^^^^^^^^^^^^

regex demo

请注意,如果您使用对比原理与您的第一个前瞻模式(如果您需要在线测试,请记住添加 \n[^*\n] ,因为您在那里针对单个多行字符串进行测试,而不是针对多个字符串):
^(?!(?:[^*]*\*){2})(?!.*\b\*\b)[*a-zA-Z0-9]+$
^^^^^^^^^^^

详情
  • ^ - 字符串开头
  • (?!(?:.*\*){2}) - 如果出现两次除换行符以外的任何 0+ 字符,则匹配失败的负前瞻,尽可能多,然后是 *紧接在当前位置的右侧
  • (?!.*\b\*\b) - 如果有除换行符以外的任何 0+ 个字符,则匹配失败的负前瞻,尽可能多,然后 *在当前位置的右侧用单词字符括起来
  • [*a-zA-Z0-9]+ - 1+ ASCII 字母数字字符或 *
  • $ - 字符串的结尾。
  • 关于用于通配符 (*) 搜索的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61521485/

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