我已经用Java构建了一个程序,用于将汇编代码转换为机器代码,我使用这个正则表达式来实现它:
^((?<label>.*):)?\s*(?<instruction>\w+)(\s+(?<op1>\w+))?(\s+(?<op2>\w+))?(;\s+(?<comment>.*))?$
我尝试使用标准的regex.h,如果我将组名称编译出来,它会编译但不起作用,因为可选组()?
被视为选择组...
在谷歌搜索真的很难,因为一切都是关于C#而不是C.我明白Java,Python,JavaScript甚至C#会让我的生活变得更轻松,但我需要在C中做。我无法使用正则表达式,它将成为sscanf
挑战。
有没有办法将此正则表达式转换为C正则表达式,或者java.util.regex
有一个C等价物?
答案 0 :(得分:3)
我使用PCRE从C或C ++复杂的正则表达式中获得了一些运气。 它的使用和使用非常广泛。它曾经有过unicode数据的一些问题,但看起来其中一些已经解决了。
PCRE支持使用pcre_copy_named_substring
函数在您的示例中使用的命名捕获。
答案 1 :(得分:0)
我不确定这会有多大帮助,你需要投入多少工作。但是你为什么不看看java.util.regex.Pattern的Java源代码来看看它是如何构建的。如果这就是你想要的,那么你只需要翻译成C。