duanqian9593
duanqian9593
2018-01-06 07:29
浏览 564
已采纳

正则表达式不匹配字符串中的双引号(仅单引号)

I have written this regex to match translation strings. Everything works fine except it only matches single quotations '' in strings, although I've written several rules to match both single and double quotations.

Here is my regex rule:

(Yii::t\()(\'|\")(.*?)(\'|\")\,(\'|\")(.*?)(\'|\")\)

as expected (\'|\") should match both ones but it doesn't.

I have also tried the following rules as well:

('|")
(['"])

Examples:

successfully matches these:

Yii::t('backend','My Profile')
Yii::t('backend','Log Out')

does not match these:

Yii::t("backend", "Search...")
Yii::t("backend", 'Sounds')

code i'm using to for matching regex:

re := regexp.MustCompile(`(Yii::t\()(\'|\")(.*?)(\'|\")\,(\'|\")(.*?)(\'|\")\)`)
matches := re.FindAllString(line, -1)

Update: The problem was because some strings contained white spaces (not because of quotations).

图片转代码服务由CSDN问答提供 功能建议

我已经编写了此正则表达式以匹配翻译字符串。 一切工作正常,除了只匹配字符串中的单引号'',尽管我编写了一些规则以匹配单引号和双引号。

这是我的 正则表达式规则:

 (Yii :: t \()(\'| \“)(。*?)(\'| \”)\,(\'|  \“)(。*?)(\'| \”)\)
   
 
 

与预期相同(\'| \“) 应该同时匹配两个。

我也尝试了以下规则:

 ('|“)  
(['“])
   
 
 

示例:

成功匹配以下内容:

  Yii :: t('backend','My Profile')
Yii :: t('backend','Log Out')
   
 
 <  p>与以下项不匹配: 
 
 
  Yii :: t(“ backend”,“ Search ...”)
Yii :: t(“ backend”,'Sounds'  )
   
 
 

我用来匹配正则表达式的代码:

  re:= regexp.MustCompile(`  (Yii的::牛逼\()(\ '| \“?)(*)(\' | \ ”)\(\'| \“?)(*)(\'| \”)\)  `)
matches:= re.FindAllString(line,-1)
   
 
 

Update: 问题是因为某些字符串 留有空格(不是因为引号)。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • douhuang2673
    douhuang2673 2018-01-06 07:39
    已采纳

    Try this Regex:

    Yii::t\((?:['"][^'"]*['"],?\s*)*\)
    

    Click for Demo

    Explanation:

    • Yii::t\( - matches Yii::t( literally
    • (?:['"][^'"]+['"],?\s*)*\)
      • ['"] - matches either ' or "
      • [^'"]* - matches 0+ occurrences of any character that is neither ' nor "
      • ['"] - matches a single occurrence of either ' or "
      • ,? - matches 0 or 1 occurrence of a ,
      • \s* - matches 0+ occurrences of a whitespace
      • * - The last * matches the above 5 sub-patterns 0+ times
      • \) - matches ) literally

    Alternative Solution:

    Yii::t\(\s*['"][^'"]*['"]\s*(?:,\s*['"][^'"]*['"]\s*)*\)

    点赞 评论
  • dongli8722
    dongli8722 2018-01-06 07:46

    This RegEx matches everything:

    (Yii::t\(\s*)(\'|\")(.*?)(\'|\")\,\s*(\'|\")(.*?)(\'|\")\)
    

    See here

    点赞 评论
  • dousa2794
    dousa2794 2018-01-06 14:14

    Try this Regex , This matches everything :

    Yii::t\(('|")(.*)(\'|\"),('|[  ]("|'))(.*)('|")\)
    

    Click here for output !

    点赞 评论

相关推荐