免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4074 | 回复: 19

请教一个正则的写法 [复制链接]

论坛徽章:
0
发表于 2017-08-18 15:23 |显示全部楼层
我想提取一个文件中所有类似  _("ssggsas")  的字符,也就是以 _(" 开头,")结尾,现在用 /_\("(.*?)"\)/i 可以提取到标准字符,但是遇到里面包含有双引号或者括号就出错了。

比如: _("ssg\")gsas") 就出错了,在前面就截断了。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2017-08-19 01:20 |显示全部楼层
  1. /_\(" ( [^\\] | \\" )+? \)"/xms
复制代码

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
发表于 2017-08-19 08:54 |显示全部楼层
感觉你是要保持ssggsas这个队形的
  1. / _\(" (s[\\"()]*){2} (g[\\"()]*){2} s[\\"()]* a[\\"()]* s[\\"()]* "\) /ix
复制代码

论坛徽章:
0
发表于 2017-08-20 07:59 |显示全部楼层
stanley_tam 发表于 2017-08-19 08:54
感觉你是要保持ssggsas这个队形的

谢谢。不过还是不行

论坛徽章:
0
发表于 2017-08-20 08:06 |显示全部楼层
cnncc 发表于 2017-08-20 07:59
谢谢。不过还是不行

用过 gettext 多语言的应该知道, gettext 是用 _("英文") 这样的标签把需要翻译的字符包含起来。

我的应用场景就是把模板文件里面的所有多语言标签提取出来,写入一个 po 文件,也就是 以 _("  开头,以  ")  结尾,中间包含任意字符

我现在就是遇到  _("example Loadfile(\"test.txt\"); abcdefgsgdfgg") 就出错

标准的 _("example") 就没问题。

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
发表于 2017-08-20 09:38 |显示全部楼层
回复 5# cnncc
那就直接这样试试
  1. /_\(" .* "\)/ix;
复制代码

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2017-08-20 12:43 |显示全部楼层
不知我的写法有没有试过,其实处理这种计算机语言,要先构建语法描述,因为有许多嵌套结构,还有许多例外。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-08-20 13:53 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-08-20 13:54 编辑

回复 5# cnncc
举个例子? 否则只能是猜来猜去,文件中的内容到底是个啥情况?



论坛徽章:
0
发表于 2017-08-22 23:57 |显示全部楼层
我感觉重点是如何匹配里面那个双引号围起来的字符串,这个字符串里面可以有用\作escape的双引号。

或许可以用negative look behind来做,比如这样

  1. /( _\( ".*?(?<!\\)" \) )/x
复制代码

论坛徽章:
0
发表于 2017-08-25 11:53 |显示全部楼层
104359176 发表于 2017-08-20 12:43
不知我的写法有没有试过,其实处理这种计算机语言,要先构建语法描述,因为有许多嵌套结构,还有许多例外。 ...

谢谢,我在4楼的其实就是回复你的,只是点错了楼层!

3楼的朋友理解错我的意思了,并不是要保持规则,我是随便输入的字符。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP