我写了这个正则表达式来匹配翻译字符串。一切正常,但它只匹配字符串中的单引号''
,尽管我写了几条规则来匹配单引号和双引号。
这是我的正则规则:
(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)
更新: 问题是因为某些字符串包含空格(不是因为引用)。
答案 0 :(得分:2)
试试这个正则表达式:
Yii::t\((?:['"][^'"]*['"],?\s*)*\)
<强>解释强>
Yii::t\(
- 按字面意思匹配Yii::t(
(?:['"][^'"]+['"],?\s*)*\)
['"]
- 匹配'
或"
[^'"]*
- 匹配任何不属于'
或"
['"]
- 匹配'
或"
,?
- 匹配,
\s*
- 匹配空格的0 +次出现*
- 上一个*
与上述5个子模式匹配0次以上\)
- 按字面意思匹配)
替代解决方案:
答案 1 :(得分:1)
答案 2 :(得分:0)