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

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

有什么帮助吗?

编辑:我输入了行数。

最佳答案

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

这里有两个版本,因为我不确定你是否想捕获“字符串内部”或“整个字符串”

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

版本 1:“字符串内部

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

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

版本 2:“整个字符串”

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

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

如果您有任何疑问,请告诉我!

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

关于c - 在 C 代码中提取字符串的正则表达式(不在注释内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23368977/

相关文章:

java - 使用前导空格打印来自扫描仪的字符串输入

c - 在C中将数组存储在另一个数组(3D数组)中

c - printf 语句中的不同数据类型变量在打印顺序中如何相互影响

C程序无限循环

c++ - 我如何散列密码并将其存储以供以后使用另一个摘要进行验证?

regex - 如何使用 Perl 忽略多行字符串中的最后一个换行符

python 从文件中删除行

c# - 什么时候使用 String.Format 与字符串连接比较好?

c - 为什么我无法在 Raspberry Pi 上使用 D2XX 访问我的 FTDI 设备?

regex - 从 bash shell 中的字符串返回数字