正则表达式在C代码中提取字符串(不在注释中)

时间:2014-04-29 15:28:56

标签: c regex string

我在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])))*\*+/)|(//.*)

任何帮助?

编辑:我放了一些行。

2 个答案:

答案 0 :(得分:3)

Hernaldo,这是一个有趣的问题。

以下是两个版本,因为我不确定您是否要捕获“inside of the string”或"the whole string"

下面的正则表达式捕获字符串以捕获组1.您完全忽略整体匹配(组0)并只关注组1.要检索字符串,只需迭代您的语言中的组1匹配(如果丢弃空字符串,则丢弃有)。

版本1:“The inside of the string

(?s)/\*.*?\*/|"([^"]+)"

这会将%sxtraInicializando...捕获到第1组。

版本2:"The whole string"

(?s)/\*.*?\*/|("[^"]+")

这会将"%sxtra""Inicializando..."捕获到第1组。

如果您有任何疑问,请与我们联系!

注意:我没有处理/* nested /* comments */ */,因为问题中未指定。这需要一些调整,可能需要一个支持递归的正则表达式引擎。

答案 1 :(得分:0)

EditPad 6/7的最终解决方案是:

(?<!^[ \t]*/?[*#][^"\n]*")(?<=^[^"\n]*")[^"]+

链接: Regular expression for a string that does not start with a /*