gpt4 book ai didi

Perl split() 不删除定界符

转载 作者:行者123 更新时间:2023-12-02 07:37:10 25 4
gpt4 key购买 nike

我正在尝试解析 C 函数声明。我想从字符串中获取 token 数组。所以我使用拆分:

$function = "int func1(  int *   , const   float, const char[])"
print split(/(\(|\)|\*|[|]|,|\ )/, $function);

它返回这个数组

["int" "func1", "(", "int", "*", ",", "const", "float", ",", "const", "char[]", ")"]

这基本上是正确的,但我不需要删除空格。所以我期待这样的事情

["int " "func1", "(  ", "int ", "*   ", ", ", "const   ", "float", ", ", "const ", "char[]", ")"]

我有什么选择吗? (而不是编写我自己的词法解析器)

最佳答案

对于初学者来说,它不会删除空格。他们正在被退回。

'int',' ','func1','(','',' ','',' ','int',' ','','*','',' ','',' ','',' ','',',','',' ','const',' ','',' ','',' ','float',',','',' ','const',' ','char[]',')'

它们只是作为自己的“ token ”返回,还有许多空字符串。

split 的第一个 arg 应该匹配分隔标记的内容,但这显然不是您提供的内容。由于实际上没有字符分隔标记,因此它必须是匹配零个字符的内容。这意味着需要使用前瞻和/或后视。

split /(?=[()*|,])|(?<=[ ()*,])(?! )/

将给出以下内容(这正是您所要求的):

'int ',
'func1',
'( ',
'int ',
'* ',
', ',
'const ',
'float',
', ',
'const ',
'char[]',
')'

关于Perl split() 不删除定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15068243/

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