gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:32:01 24 4
gpt4 key购买 nike

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

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

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

Click for Demo

解释:

  • Yii::t\( - 匹配 Yii::t( 字面意思
  • (?:['"][^'"]+['"],?\s*)*\)
    • ['"] - 匹配 '"
    • [^'"]* - 匹配 0 次以上既不是 ' 也不是 "
    • 的字符
    • ['"] - 匹配单个出现的 '"
    • ,? - 匹配 0 次或 1 次出现的 ,
    • \s* - 匹配出现 0 次以上的空格
    • * - 最后的*匹配以上5个子模式0+次
    • \) - 字面上匹配 )

替代解决方案:

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

关于正则表达式不匹配字符串中的双引号(只是单引号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48125221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com