Regex 正则表达式:数学表达式中带参数的捕获函数

Regex 正则表达式:数学表达式中带参数的捕获函数,regex,Regex,我观察的与之匹配的字符串如下: 5+\uuufxn1.'uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 我试过使用regex express[A-Z0-9\]+\(.*?\)哪个匹配 \uuufxn1\uuuuuuuuu(“你好”,1,3,”\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

我观察的与之匹配的字符串如下:

5+\uuufxn1.'uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

我试过使用regex express
[A-Z0-9\]+\(.*?\)
哪个匹配

\uuufxn1\uuuuuuuuu(“你好”,1,3,”\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

我期待的是:

\uuufxn1\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


如何实现它。请帮助。

如果括号总是平衡的,您可以使用基于递归的正则表达式

\[A-Z0-9\]+\(((?:[^()]+++\;(?-1))*\)
如果字符串中的
数量不平衡,则可能会失败,请参阅。简言之:

  • \[A-Z0-9\]+\\
    -
    \
    ,一个或多个大写字母、数字或
    \
    ,然后
    \
  • (\((((?:[^()])+++(?-1))*\)
    -第1组:
    ),然后递归除
    或整个第1组模式以外的一个或多个字符的任何零次或多次出现,然后递归一个
    (因此匹配带有任意数量成对嵌套括号的
    (…)
    子字符串)
如果需要支持不平衡括号,则使用只匹配所有允许数据格式的正则表达式更安全,例如

。[A-Z0-9\]+\(\s*(?:'[^']*'.\d+)(:\s*,\s*(?:'[^']*'.\d+))*\s*\)
请参阅。或者,如果可以使用
\
字符串中的
\
字符对
'.'
进行转义,则可以使用

\\[A-Z0-9\]+\\(\s*(?:'[^'\]*(?:\.[^'\]*)*“\\\d+(:\s*,\s*(?:'[^'\]*(?:\.\.^'\]*)*“\\\\\d+)*\s*)

详情:

  • \[A-Z0-9\]+\
    -
    \
    ,一个或多个高位或数字,然后
    \
  • \(
    -
    char
  • \s*
    -零个或多个空格
  • (?:“[^']*”|\d+
    -
    ,零个或多个非
    ,然后是一个
    或一个或多个数字
  • (?:\s*,\s*(?:'[^']*'.\d+))
    -零次或多次出现
    包含可选空格,然后出现
    “…”
    子字符串或一个或多个数字
  • \s*\)
    -零个或多个空格,然后是一个

注意:如果您需要支持任何类型的数字,您需要将
\d+
替换为更复杂的模式,如
[+-]?\d+(?:\.\d+)
或。

谢谢您的快速回答。我正在尝试了解您所指的内容。同时,我还需要
5+\ufxn1\uu('hello',1,3,\uuuuuuuuuuuuuu hello\uuuuuuo(hello)+)+5+(2)+uuuuuuufxn2)__(“好孩子”)
这需要匹配。@wrufesh您可以继续增强模式,可以有更多的示例,现在您知道如何添加它们的支持。@wrufesh注意,如果您绝对确定输入中没有不平衡的括号,您仍然可以使用基于递归的正则表达式。但是,此时您应该停止考虑单个regex解析这些输入,但编写一个专用格式解析器。这真的很难。最后一个是我想要的。我确信没有不平衡的括号,或者你可以说我不需要处理这些。非常感谢你的帮助。谢谢。:)@wrufesh我重新给出了答案。对于正则表达式来说,捕获成对的括号、允许嵌入括号以及处理不平衡的括号是一个非常棘手的要求。你最好使用解析器。