卡在短正则表达式上:匹配 1 个字符,然后匹配该字符或一组中的另一个字符,然后匹配另一个字符[重复]

问题描述 投票:0回答:1

我的正则表达式与预期的短语不匹配,我不知道是否可以做我想做的事情。

预期匹配(随着字符串的进展)

  • 短语以 t
  • 开头
  • 开始 t 后的第一个字符不得为 t
  • 有任意数量的 ty 字符(可以是 0)
  • 必须以 y
  • 结尾

应匹配:

  • tytyyy

不应匹配:

  • 蒂蒂
  • tyt

正则表达式

/t[ty]*y/

这将匹配ty 但它也会匹配 tty

其他正则表达式

t(?!t)[ty]*y
由于某种原因,

这与 tty 匹配,即使我明确指定在初始 t 之后不能有 t,之后可以有任意数量的 ty,并且应该以y

我正在尝试找到一个中间立场,但无论我如何更改我的正则表达式,它最终都会失败至少 1 个我在上面列表中提到的其他检查。

编辑:我的问题寻求有关字符匹配的复杂正则表达式的帮助,而第二个问题寻求更简单的模式来匹配特定的 URL 格式。已经澄清,它正在就这个特定场景以及我针对这个问题本身的解决方案寻求帮助。

regex
1个回答
1
投票

^t([^t][ty]*)?y$
- 正则表达式 101

  • ^ - 单词开头
  • t - 以 t 开头
    • [^t] - 非 t 字符
    • .* - 任何以下字符
  • )? - 以上是可选的(它们在组内)
  • y - 以 y 结尾
  • $ - 词尾

比赛:

  • tytyyy

不匹配:

  • tyt

评论回复:

t(?!t)[ty]*y

  • 上面不起作用的原因是因为您没有使用 ^ 和 $ 指定开始/结束
  • t - 一开始还可以
  • (?!t) - 是负向前瞻,您可以使用 [^t] - 匹配除 t 之外的任何内容,而不是排除开头字母 t 之后的字母 t
  • [ty]* 没关系
  • y 还好

执行上述操作,为中间组添加

()?
以允许其匹配
ty
(通过这样可以在 t 和 y 之间没有任何内容)意味着您最终会得到一个通过条件的替代正则表达式以上
^t([^t][ty]*)?y$

© www.soinside.com 2019 - 2024. All rights reserved.