Regex 为模式建议正则表达式

Regex 为模式建议正则表达式,regex,Regex,我这里的脚本有多个“(“and”)”: 我想使用java.util.regex.Pattern来获取这个脚本的条件。我想要的结果是: 如果(a==b&&a==c) 其他((a==b)和&(a!=c)) 其他((a!=b)和&(a!=c)) 我使用了: Pattern=Pattern.compile((#if |#elseif)+(.*)(([^)]{1,})); 但结果并非预期。请帮我看一下这里的正则表达式。 非常感谢。不幸的是,Java不支持递归,因此无法正确匹配平衡括号中的组。如果

我这里的脚本有多个“(“and”)”:

我想使用java.util.regex.Pattern来获取这个脚本的条件。我想要的结果是:

  • 如果(a==b&&a==c)
  • 其他((a==b)和&(a!=c))
  • 其他((a!=b)和&(a!=c))
我使用了: Pattern=Pattern.compile((#if |#elseif)+(.*)(([^)]{1,})); 但结果并非预期。请帮我看一下这里的正则表达式。
非常感谢。

不幸的是,Java不支持递归,因此无法正确匹配平衡括号中的组。如果不希望If/elseif条件后的零件包含括号,可以使用以下解决方法:

(?m)^#(?:if|elseif).*? (?!.*[()])(.+)

不幸的是,Java不支持递归,因此无法正确匹配平衡括号组。如果不希望If/elseif条件后的零件包含括号,可以使用以下解决方法:

(?m)^#(?:if|elseif).*? (?!.*[()])(.+)
试试这个正则表达式:

(?:if | elseif)\s*\(?:[^()]+\)\124?\(?:\ s*\)+)

说明:

  • (?:if | elseif)
    -匹配
    if
    elseif
  • \s*
    -匹配0多次出现的空白字符
  • [^()]+\)
    -匹配既不是
    也不是
    的任何字符的1+次出现次数。然后是匹配的
  • |
    -或
  • *?\)(?:\s*\)+
    -使用嵌套括号处理大小写
    ()
更新的表达:

试试这个正则表达式:

(?:if | elseif)\s*\(?:[^()]+\)\124?\(?:\ s*\)+)

说明:

  • (?:if | elseif)
    -匹配
    if
    elseif
  • \s*
    -匹配0多次出现的空白字符
  • [^()]+\)
    -匹配既不是
    也不是
    的任何字符的1+次出现次数。然后是匹配的
  • |
    -或
  • *?\)(?:\s*\)+
    -使用嵌套括号处理大小写
    ()
更新的表达:



如果
If
elseif
语句仅限于一行,那么您可能可以尝试类似的操作。@Gurman谢谢,但我使用Java运行,这不是预期的。我正在使用此工具并在我的应用程序上运行。什么脚本?在Regextest中,它的工作原理如图所示。哦,我没有看到更新的问题。我的错。试试这个
(?:if | elseif)\s*\([^()]+\).*?\(?:\s*)+)
?如果
if
elseif
语句被限制在一行,那么可能你可以尝试类似的东西。@Gurman谢谢你,但我用Java运行时它并没有预期的效果。我正在使用此工具并在我的应用程序上运行。什么脚本?在Regextest中,它的工作原理如图所示。哦,我没有看到更新的问题。我的错。试试这个
(?:if | elseif)\s*\([^()]+\)\.*?\)(?:\s*)+)
?谢谢你的回答,但我认为你的表达式适用于PHP,我已经改为Javascript它不适用于你在原始问题中提到的“java.util.regex.Pattern”-你没有使用java吗?当然,Java和Javascript是不同的,它们支持的regex风格也是不同的。我使用Java for Android,我总是使用Javascript表达式来测试这种模式。请建议使用Java的表达式。谢谢。这是这个的Java表达式。与其在不兼容的味道上测试它,不如在实际应用程序中试用它。我已经在我的应用程序上试用过了,但它出现了错误:“正则表达式”(“m”)^(“if”;“elseif”)\((\(((?)\)*)(。+)“”的格式不正确:未知的内联修饰符少…(Ctrl+F1)“谢谢你的回答,但我认为你的表达式适用于PHP,我已经改为Javascript它不工作了,您在最初的问题中提到使用“java.util.regex.Pattern”——您没有使用java吗?当然,Java和Javascript是不同的,它们支持的regex风格也是不同的。我使用Java for Android,我总是使用Javascript表达式来测试这种模式。请建议使用Java的表达式。谢谢。这是这个的Java表达式。与其在不兼容的味道上测试它,不如在实际应用中尝试一下。我已经在我的应用程序上尝试过了,但它出现了错误:“正则表达式”?“m”^(?:if ^ elseif)\(\((?))*)(.+)“'格式错误:未知的内联修饰符少…(Ctrl+F1)“Hi@Gurman与上面相同的正则表达式,在这种情况下,它不工作regextester:#if({plan:tag}==“(Good]”)Good#elseif(!({plan:tag}==“(Bad)”)这是意料之中的。请再次帮助我。谢谢。是的,我明白了,所以我想我们可能无法在这种情况下使用regex,你是否这样认为:)@BenJima你是正确的。你可以取消选择它作为答案。如果我想出一个更好的表达式,我会再联系你(可能在工作后).我只为您在问题中提到的示例创建了一个正则表达式Yes,thank you@Gurman我将在等待您的过程中尝试找到解决方案:D@BenJima我希望这就是你想要的。注意:只有在if或elseif条件中放置了一个
#
时,这才会失败。在本例中,Hi@Gurman使用上面相同的正则表达式,它不工作regextest:#if({plan:tag}==“(Good]”)Good#elseif(!({plan:tag}==“(Bad)”)不是预期的。请再次帮助我。谢谢。是的,我明白了,所以我想我们可能不能在这个案例中使用正则表达式,你这样认为吗:)@BenJima你是对的。你可以取消选择它作为答案。如果我想出一个更好的表达式,我会给你回复的(可能在下班后).我只为您在问题中提到的示例创建了一个正则表达式Yes,thank you@Gurman我将在等待您的过程中尝试找到解决方案:D@BenJima我希望这就是您想要的。注意:只有在if或elseif条件中放置了
#
时,此操作才会失败。