gpt4 book ai didi

c# - 用于验证逻辑 && || 的正则表达式字符串中的运算符

转载 作者:太空狗 更新时间:2023-10-29 21:58:31 25 4
gpt4 key购买 nike

我正在尝试创建一个 Regex 表达式来验证逻辑 && || 字符串组合及其相应的左括号和右括号 ()

我一直在搞乱 Regex 象形文字模式,但似乎无法使其正常工作,主要是因为我完全不了解 Regex 模式。

经过几个小时的 StackOverflow 和谷歌搜索,这就是我目前所拥有的,我觉得我很接近。

    private void ValidationTest()
{
string hieroglyphics = @"^(?=^[^()]*\((?>[^()]+|\((?<DEPTH>)|\)(?<-DEPTH>))*(?(DEPTH)(?!))\)[^()]*$)[(]*\d+[)]*(\s+(&&|\|\|)\s+[(]*\d+[)]*)*$";

var tests = new List<string>
{
// Working
"(1 && 2)",
"((1 && 2) && (3 || 4))",
"((1 && 2) && (3 || 4) || ((1 && 2) && (3 || 4)))",

// Not working
"(Stack && Overflow)"
};

if (tests.All(test => Regex.IsMatch(test, hieroglyphics)))
{
MessageBox.Show("Woohoo!!");
}
}

到目前为止,我所遇到的主要问题是,如果没有方括号 1 && 2,它将无法验证,与 (1 && 2) && (3 || 4) 相同。此外,它似乎忽略了单词 alltogeter (Stack && Overflow)

我尝试验证的一些字符串示例。

"IsRecording && IsPlaying"
"IsVisible && (IsPlaying && (IsMusic || IsRadio))"

还有一些包含括号的关键字可能会把事情搞砸示例:

"IsWindowVisible(2) && (IsControlVisible(22) && IsControlFocused(100))"

编辑:现在这个表达式可以很好地验证我需要的那种复杂性,但是我唯一真正的问题是它只有 nubers。

使用此 Regex 可以正常验证的复杂示例

"((1 && 2) && (3 || 4) || ((1 && 2) && (3 || 4)))"

如果没有括号,一个简单的字符串 1 && 2 将无法验证,但我不介意在其中添加括号。

我只需要添加对单词的支持,而不仅仅是数字,如果有帮助,这将是一个固定的单词列表。

如果有人能发现错误或指出更好的方向,那就太棒了谢谢

编辑:

通过 mellamokb 回答工作完美。似乎问题在于 d+ 需要是 0-9a-zA-Z()

这是对其他人有用的模式。

   string hieroglyphics = @"^(?=^[^()]*(?>[^()]+|\((?<DEPTH>)|\)(?<-DEPTH>))*(?(DEPTH)(?!))[^()]*$)[(]*[0-9a-zA-Z()]+[)]*(\s+(&&|\|\|)\s+[(]*[0-9a-zA-Z()]+[)]*)*$";

它准确地验证了我所需要的

例子:

 "IsPlayer(Video) && Player(Playing)",
"((IsPlayer(Video) && (Player(Playing) && ControlIsVisible(34))) || (IsPlayer(Video) && (Player(Playing) && ControlIsVisible(34)))) && ControlIsFocused(22)"

最佳答案

我认为您无法在没有包装 () 的情况下验证表达式的原因是核心嵌套逻辑中的包装括号。如果你去掉我在下面注释的括号,那么其他两个非包装表达式有效:

^(?=^[^()]*\((?>[^()]+|\((?<DEPTH>)|\)(?<-DEPTH>))*(?(DEPTH)(?!))\)[^()]*$...
^^ remove this remove this ^^

然后为了允许不只是数字的表达式,您需要将限制性的 \d 替换为您想要验证的更自由的定义,例如 [0- 9a-zA-Z]:

...[(]*\d+[)]*(\s+(&&|\|\|)\s+[(]*\d+[)]*)*$
^^ change these expression ^^

所以它会变成:

...[(]*[0-9a-zA-Z]+[)]*(\s+(&&|\|\|)\s+[(]*[0-9a-zA-Z]+[)]*)*$

演示:http://ideone.com/jwkcpL

关于c# - 用于验证逻辑 && || 的正则表达式字符串中的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14718556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com