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

Regex 正则表达式不匹配字符串中的双引号(仅单引号),regex,go,regex-group,Regex,Go,Regex Group,我编写这个正则表达式是为了匹配翻译字符串。一切正常,除了它只匹配字符串中的单引号',尽管我已经编写了几个规则来匹配单引号和双引号 这是我的正则表达式规则: (Yii::t\()(\'|\")(.*?)(\'|\")\,(\'|\")(.*?)(\'|\")\) 正如预期的那样,(\'\\”)应该与这两个匹配,但它不匹配 我还尝试了以下规则: ('|") (['"]) 示例: 成功匹配以下各项: Yii::t('backend','My Profile') Yii::t('backend','

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

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

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

说明:

  • Yii::t\(
    -按字面意思匹配
    Yii::t(
  • (?:['”][^']+['”],?\s*)*\)
    • ['”]
      -匹配
      '
    • [^'”]*
      -匹配既不是
      也不是
    • ['”]
      -匹配单个出现的
      '
    • ,?
      -匹配0或1次出现的
    • \s*
      -匹配0多次出现的空白
    • *
      -最后一个
      *
      匹配上述5个子模式0+次
    • \)
      -按字面意思匹配
替代解决方案:

试试这个正则表达式:

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

说明:

  • Yii::t\(
    -按字面意思匹配
    Yii::t(
  • (?:['”][^']+['”],?\s*)*\)
    • ['”]
      -匹配
      '
    • [^'”]*
      -匹配既不是
      也不是
    • ['”]
      -匹配单个出现的
      '
    • ,?
      -匹配0或1次出现的
    • \s*
      -匹配0多次出现的空白
    • *
      -最后一个
      *
      匹配上述5个子模式0+次
    • \)
      -按字面意思匹配
替代解决方案:


此正则表达式匹配所有内容:

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

此正则表达式匹配所有内容:

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

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

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

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

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


你能提供一些测试输入字符串吗?@Gurman输入字符串来自PHP代码。它搜索项目并在代码中查找匹配项。顺便说一句,我已经用一些示例更新了这个问题。当然,你能发布你的assign语句吗。。。“?由于额外的空间,它不匹配!否则它匹配!我在regex101.com上查过了@卡宾霍哦。我想是这样的。您能提供正则表达式来匹配答案中的空格(如果存在)吗?您能提供一些测试输入字符串吗?@Gurman输入字符串来自PHP代码。它搜索项目并在代码中查找匹配项。顺便提一下,我已经用一些例子更新了这个问题。可以肯定的是,请您发布您的assign语句,如
patther:=“…”
?因为空间太大,它不匹配!否则它匹配!我在regex101.com上查过了@卡宾霍哦。我想是这样的。请在回答中提供正则表达式以匹配空格(如果存在)好吗?谢谢您的简要解释。我想在可能包含空格的地方添加
\s*
也可以。@sobhanbagheri我已经尝试将其包括在我的替代解决方案中,如图所示,替代正则表达式有一个小问题,导致一些非法字符串(不翻译)匹配和捕获。我想这是一个更好的方法(非捕获组已被删除):
Yii::t\(\s*['“][^'”]*['”]\s*\,\s*['“][^'”]*['”]\s*\)
如果它符合您的要求就可以了。:)谢谢你的简短解释。我想在可能包含空格的地方添加
\s*
也可以。@sobhanbagheri我已经尝试将其包括在我的替代解决方案中,如图所示,替代正则表达式有一个小问题,导致一些非法字符串(不翻译)匹配和捕获。我想这是一个更好的方法(非捕获组已被删除):
Yii::t\(\s*['“][^'”]*['”]\s*\,\s*['“][^'”]*['”]\s*\)
如果它符合您的要求就可以了。:)