无法构建正则表达式

时间:2016-07-20 04:18:04

标签: regex

我正在尝试构建一个具有以下规则的正则表达式:

  • 必须以字符或星号开头
  • 字符后面可以跟更多字符,句号或等号
  • 句号必须后跟更多字符或星号
  • 星号必须后跟等号

合法案件将是:

  • * =文本
  • 字=文本
  • word.word.word ... word = text(即。可以有很多重复的.word)
  • 字。* =测试

如果需要更多澄清,请告诉我,这很难解释。

我目前在正则表达式中有这个:

(\w+\.)*(\*|\w+)\=\w+

正确验证给定的示例,但它匹配“。* = INFO”,这应该是无效的。任何人都知道我怎么能让它不匹配这个字符串?

2 个答案:

答案 0 :(得分:1)

为方便起见,我们将一个标记称为星号或任何非零长度的单词。因此,word*是“令牌” 我们可以使用正则表达式将其描述为(\*|\w+)

现在,我们需要与以下内容匹配的正则表达式:

  • 开头一行
  • 一个令牌
  • (点+标记)
  • 的0或更多组合
  • 等号和非空字
  • 一行

结果,我们有类似

的东西
^(\*|\w+)(\.(\*|\w+))*=\w+$

^         (\*|\w+)       (\.(\*|\w+))*               =\w+$   
begin     token          0 or more (dot + token)     equals, word and end

Regex101 demo

答案 1 :(得分:1)

^(\*|\w+(\.\w+)*(\.\*)?)\=\w+$

它分别处理以星号开头的情况和以字符开头的情况,因为我无法将它们组合起来。

^          begin
(
 \*        asterisk
|            or
 \w+       first word
 (\.\w+)*  optionally more words, separated by dot
 (\.\*)?   optional dot + asterisk
)
\=         equals
\w+
$          end