8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 Perl 中解析 C 字符串时 `s/'((?:[^']|\')*)'//` 有什么问题?

Farbod Ahmadian 2月前

91 0

我似乎无所事事,因为我无法找出正则表达式的错误所在:我试图解析一个包含一行字符串的 C 源文件(实际上这些字符串是

我似乎坐在我的眼睛上,因为我无法找出我的正则表达式有什么问题:

我正在尝试解析包含一行内的字符串的 C 源文件(实际上这些字符串是正则表达式,但这并不重要)。基本上 /"([^"]*)"/ 应该捕获字符串(不带引号),除非其中有双引号。

我也可以使用字符串中的双引号匹配 /(\\"*)/! ,但是我无法组合两个正则表达式:

使用 /"((?:[^"]|\\")*)"/ (捕获双引号之间的文本直到第一个非转义的双引号)捕获在第一个之后结束 " ,如本示例调试器会话所示:

  DB<15> $x='"SAMSUNG SSD SM841N? (2\\.5\"? 7mm |mSATA )?(128|256|512)GB( SED)?|"'

  DB<16> x $x =~ s/"((?:[^"]|\\")*)"//
0  1
  DB<17> x $x
0  '? 7mm |mSATA )?(128|256|512)GB( SED)?|"'
  DB<18>

在写这个问题的时候,我尝试交换两个替代方案,突然它就起作用了:

  DB<18> $x='"SAMSUNG SSD SM841N? (2\\.5\"? 7mm |mSATA )?(128|256|512)GB( SED)?|"'

  DB<19> x $x =~ s/"((?:\\"|[^"])*)"//
0  1
  DB<20> x $x
0  ''
  DB<21>

那么正则表达式 A|B B|A 等价的吗?

帖子版权声明 1、本帖标题:在 Perl 中解析 C 字符串时 `s/'((?:[^']|\')*)'//` 有什么问题?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Farbod Ahmadian在本站《string》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 回复“我也尝试使用非贪婪捕获”,它没有像你想要的那样匹配,所以你尝试让它匹配得更少???

返回
作者最近主题: