我在 C 中有这段代码,但我只知道如何使用不在注释代码内的正则表达式提取字符串:
1. /* * "path_build()" function in "home.c" for more information.
2. * this is an example basic"
3. */
4.
5. /*** Free ***/
6. VALOR = string_make(format("%sxtra", libpath));
7. event_signal_string(EVENT_INITSTATUS, "Inicializando...");
应该只返回:
"%sxtra"
"Inicializando..."
我尝试:
".*"
但它不起作用,它显示“”内的所有文本,包括/*...*/内的字符串
我使用 EditPag Pro、RegExp 面板。 这是一个游戏翻译项目,我将每个 C 文件的字符串翻译成西类牙语。我无法删除原始文件的注释。
我唯一清楚的是,这是在 C 中查找注释的正则表达式,也许这将有助于解决方案:
(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)
有什么帮助吗?
编辑:我输入了行数。
最佳答案
Hernaldo,这是一个有趣的问题。
这里有两个版本,因为我不确定你是否想捕获“字符串内部
”或“整个字符串”
下面的正则表达式捕获字符串来捕获组 1。您完全忽略整体匹配(组 0)并仅关注组 1。要检索字符串,只需迭代您语言中的组 1 匹配项(如果存在,则丢弃空字符串)任何)。
版本 1:“字符串内部
”
(?s)/\*.*?\*/|"([^"]+)"
这会将 %sxtra
和 Inicializando...
捕获到第 1 组。
版本 2:“整个字符串”
(?s)/\*.*?\*/|("[^"]+")
这会将 "%sxtra"
和 "Inicializando..."
捕获到第 1 组。
如果您有任何疑问,请告诉我!
注意:我没有处理 /* 嵌套/* 注释 */*/
因为问题中没有指定。这将需要一些调整,并且可能需要一个支持递归的正则表达式引擎。
关于c - 在 C 代码中提取字符串的正则表达式(不在注释内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23368977/