我在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])))*\*+/)|(//.*)
任何帮助?
编辑:我放了一些行。
答案 0 :(得分:3)
Hernaldo,这是一个有趣的问题。
以下是两个版本,因为我不确定您是否要捕获“inside of the string
”或"the whole string"
下面的正则表达式捕获字符串以捕获组1.您完全忽略整体匹配(组0)并只关注组1.要检索字符串,只需迭代您的语言中的组1匹配(如果丢弃空字符串,则丢弃有)。
版本1:“The inside of the string
”
(?s)/\*.*?\*/|"([^"]+)"
这会将%sxtra
和Inicializando...
捕获到第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 /*