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

Regex not matching double quotations in string (just single quotations)

我写了这个正则表达式来匹配翻译字符串。一切正常,除了它只匹配字符串中的单引号 '',尽管我已经写了几个规则来匹配单引号和双引号。

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

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

正如预期的那样 (\'|\") 应该匹配两者,但它不匹配。

我也试过以下规则:

('|")
(['"])

示例:

成功匹配这些:

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

不符合这些:

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

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

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

更新: 问题是因为一些字符串包含空格(不是因为引号)。

试试这个正则表达式:

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

Click for Demo

解释:

  • Yii::t\( - 按字面意思匹配 Yii::t(
  • (?:['"][^'"]+['"],?\s*)*\)
    • ['"] - 匹配 '"
    • [^'"]* - 匹配 0+ 次既不是 ' 也不是 "
    • 的任何字符
    • ['"] - 匹配单次出现的 '"
    • ,? - 匹配 0 次或 1 次出现的 ,
    • \s* - 匹配出现 0 次以上的空格
    • * - 最后一个*匹配上面5个子模式0+次
    • \) - 按字面意思匹配 )

备选方案:

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

这个 RegEx 匹配所有内容:

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

See here

试试这个正则表达式,它匹配所有内容:

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

Click here for output !