需要帮助的正则表达

西蒙·马克·费尔南德斯

我在称为trans的函数中包含许多字符串。在某些地方,它可能是trans('Hello')或trans(“ Hello”)我想编写一个只在两种情况下都返回Hello的正则表达式。

trans\(\'|"(.*?)\'|"\)

这是我想出的,但是在我的代码中不起作用。还返回其他带有单引号或双引号的字符串。我在preg_match_all函数中使用了上述内容,因为我必须在正则表达式中转义单引号。

我还可以在trans函数“从未发生”中包含这样的字符串

r3mainer

您需要保留开头引号的副本,并使用它来匹配匹配字符串末尾的结尾引号。如果反向引用在字符类中起作用,则可以使用像这样的表达式来实现/trans\((['"])([^\1]*)\1\)/,但是您必须使用否定的超前行为-替换[^\1]*((?!\1).)*

尝试这个:

<?php

$a = <<<END
trans("Double-quoted string")
trans('Single-quoted string')
trans("Apostrophes shouldn't be a problem")
END;

if (preg_match_all('/trans\(([\'"])(((?!\1).)*)\1\)/', $a, $matches) > 0) {
   foreach ($matches[2] as $m) echo "$m\n";
}
else echo "No match\n";

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章