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次出现的,?
,
-匹配0多次出现的空白\s*
-最后一个*
匹配上述5个子模式0+次*
-按字面意思匹配\)
)
Yii::t\((?:['"][^'"]*['"],?\s*)*\)
说明:
-按字面意思匹配Yii::t\(
)Yii::t(
(?:['”][^']+['”],?\s*)*\)
-匹配['”]
或'
“
-匹配既不是[^'”]*
也不是,
“
-匹配单个出现的['”]
或'
“
-匹配0或1次出现的,?
,
-匹配0多次出现的空白\s*
-最后一个*
匹配上述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*\)
如果它符合您的要求就可以了。:)