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

时间:2018-01-06 07:29:33

标签: regex go regex-group

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

这是我的正则规则:

(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)

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

3 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

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

Click for Demo

<强>解释

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

替代解决方案:

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

答案 1 :(得分:1)

此RegEx匹配所有内容:

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

See here

答案 2 :(得分:0)

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

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

Click here for output !