字符串的正则表达式,后跟括号中的参数

时间:2012-08-23 06:58:39

标签: regex

我正在尝试为以下场景编写正则表达式。

它可以是简单的字母数字字符串(即使它是特殊字符也可以是'@')或字母数字字符串后跟括号中的参数列表或字母数字字符串后跟空白括号:

  1. My_macro - >接受这个
  2. My_macro() - >接受这个
  3. My_macro(arg1,arg2,arg3) - >接受这个
  4. 我是正则表达的新手,我阅读了一些教程,可以形成这个正则表达式。

    ([a-zA-Z]+[a-zA-Z0-9_@]*) | ([a-zA-Z]+[a-zA-Z0-9_@.]+[\(][a-zA-Z]+[a-zA-Z0-9_@,]+[\)])
    

    这不起作用。

4 个答案:

答案 0 :(得分:2)

我注意到的一些事情:

  • 第一部分(宏名称)将出现在所有情况下,因此您无需重复。 (您可以使用“?”作为可选部分 - parens和args列表。)
  • +表达式之后的[a-zA-Z]*表达式之后的[a-zA-Z...]多余。
  • 您可能/可能没有管道/栏周围的额外空格(“|”)。这可能会弄乱你的正则表达式。
  • 你的例子在args之间有空格,但你的正则表达式没有。

[更新] 还有一个小问题:

  • 逗号很棘手。你基本上需要这样的东西:(原谅我的伪正则表达式)

    (< arg expression>([spaces] * [逗号] [空格] *< arg表达>)*)?

...应该可以选择匹配parens内的所有内容。

答案 1 :(得分:2)

^[\w@]+(\((\w+,?\s*)*\))?$

匹配:

My_macro(arg1,  arg2, arg3)
My_macro(arg1)
My_macro
My_macro()
My_macro@()

^                   # Line Start
[\w@]+              # Matches alphanumerics and @ => My_@macro
(\((\w+,?\s*)*\))?  # Matches optional argument (empty) list (), (arg) and (arg1, arg2) 
$                   # Matches Line End  

问题是你究竟想要实现的目标。为什么需要匹配这些字符串?无论如何,您的要求与大多数字符串匹配。

答案 2 :(得分:0)

[A-Za-z@][A-Za-z0-9@]*\s*\(\s*([A-Za-z@][A-Za-z0-9@]*\s*(\s*,\s*[A-Za-z@][A-Za-z0-9@]*\s*)+)?\s*\)

顺便说一句,我不会用一个正则表达式来做这个,但首先获取标识符,然后剥离parantheses,然后拆分参数列表。在代码中。

答案 3 :(得分:0)

php中的

看起来像:

    $subject = "My_macro My_@acro My_macro() My_macro(arg1, arg2, arg3)";
    $pattern = '![a-zA-Z0-9_@]+(\((([a-zA-Z0-9_@]+(\,\s)?){3})?\))?!';
    preg_match_all($pattern, $subject, $matches);
    print_r($matches[0]);


Array
(
    [0] => My_macro
    [1] => My_@acro
    [2] => My_macro()
    [3] => My_macro(arg1, arg2, arg3)
)