Regex 在构建正则表达式时遇到问题
我正在尝试构建具有以下规则的正则表达式:Regex 在构建正则表达式时遇到问题,regex,Regex,我正在尝试构建具有以下规则的正则表达式: 它必须以字符或星号开头 一个字符后面可以跟更多字符、句号或等号 句号后必须有更多字符或星号 星号后面必须跟等号 合法案件将是: *=文本 字=文本 word.word.word…word=文本(即.word可以有许多重复) word.*=测试 如果这需要更多的澄清,请让我知道,这有点难以解释 我的正则表达式目前有以下内容: (\w+\.)*(\*|\w+)\=\w+ 它正确地验证了给定的示例,但是它与“*=INFO”匹配,后者应该是无效的。有人
- 它必须以字符或星号开头
- 一个字符后面可以跟更多字符、句号或等号
- 句号后必须有更多字符或星号
- 星号后面必须跟等号
- *=文本
- 字=文本
- word.word.word…word=文本(即.word可以有许多重复)
- word.*=测试
(\w+\.)*(\*|\w+)\=\w+
它正确地验证了给定的示例,但是它与“*=INFO”匹配,后者应该是无效的。有人知道如何使它与这个字符串不匹配吗?为了方便起见,让我们将星号或任何非零长度的单词称为标记。所以,
word
和*
是“代币”。我们可以使用正则表达式将其描述为
(\*\124;\ w+
)
现在,我们需要与以下内容匹配的正则表达式:
- 行首
- 代币
- 0个或多个(点+标记)的组合
- 等号和非空字
- 行尾
^(\*|\w+)(\.(\*|\w+))*=\w+$
那是
^ (\*|\w+) (\.(\*|\w+))* =\w+$
begin token 0 or more (dot + token) equals, word and end
这将分别处理以星号开头的情况和以字符开头的情况,因为我无法组合它们
^ begin
(
\* asterisk
| or
\w+ first word
(\.\w+)* optionally more words, separated by dot
(\.\*)? optional dot + asterisk
)
\= equals
\w+
$ end
请指定正在使用和测试的正则表达式引擎。(这是一个支持
\w
指向PCRE的引擎,但是一个可靠的答案比猜测要好——有几个引擎受PCRE的启发具有不同的语法)。要清楚,在word.word.word…word=text
表单中,单词必须相同吗?也就是说,foo.bar.baz=text
是否也有效,或者仅foo.foo.foo=text
?这非常接近工作状态,但不幸的是,它让您有多个星号。
^ begin
(
\* asterisk
| or
\w+ first word
(\.\w+)* optionally more words, separated by dot
(\.\*)? optional dot + asterisk
)
\= equals
\w+
$ end