【发布时间】:2010-09-06 09:11:43
【问题描述】:
我的一个作业问题要求为x,y,z 上不包含xxx 的所有字符串开发一个正则表达式
在阅读了一些内容后,我发现了负前瞻,并使它非常有效:
(x(?!xx)|y|z)*
仍然,本着完整性的精神,是否可以在没有否定前瞻的情况下编写此内容?
阅读我所做的让我认为可以通过carets (^) 的某种组合来完成,但我无法获得正确的组合,所以我不确定。
更进一步,是否可以仅使用 or (|) 运算符排除像 xxx 这样的字符串,但仍以递归方式检查字符串?
2010 年 9 月 6 日编辑:
认为我回答了我自己的问题。我又搞砸了一些,尝试只用 or (|) 语句制作这个正则表达式,我很确定我想通了......它并没有我想象的那么混乱。如果其他人有时间用肉眼验证这一点,我将不胜感激。
(xxy|xxz|xy|xz|y|z)*(xxy|xxz|xx|xy|xz|x|y|z)
【问题讨论】:
-
typoknig - 我已经根据您的最新编辑进一步更新了我的答案。不过,我很感兴趣 - 该模式本质上是我的第一个模式的平面版本。
x{0,2}可以写成|x|xx,a(b|c)可以写成ab|ac- 为什么你都喜欢第二个? -
我实际上更喜欢我的第一个答案,因为它似乎是最直接的,但我的教授是纯粹主义者,我相信他们宁愿看到我只使用最基本的正则表达式元素,我的意思是基本的
(|)和(*)。
标签: regex