我编写了这个正则表达式来匹配翻译字符串。一切正常,除了它只匹配字符串中的单引号 ''
,尽管我已经编写了几个规则来匹配单引号和双引号。
这是我的正则表达式规则:
(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 次以上既不是'
也不是"
的字符
['"]
- 匹配单个出现的'
或"
,?
- 匹配 0 次或 1 次出现的,
\s*
- 匹配出现 0 次以上的空格*
- 最后的*
匹配以上5个子模式0+次\)
- 字面上匹配)
替代解决方案:
关于正则表达式不匹配字符串中的双引号(只是单引号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48125221/