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