【问题标题】:php preg_match_all construct patternphp preg_match_all 构造模式
【发布时间】:2012-10-02 19:53:18
【问题描述】:

我正在尝试构造preg_match_all 以搜索在以[$_ 开头并以_$] 结尾的字符串中找到的所有值,并将找到的值存储在一个数组中。

所以,在下面的例子中:

$str = "I have a [$_dog_$], a [$_cat_$], but not a ferret.";
preg_match_all($regex_pattern, $str, $normalPets);

$normalPets 应该包含[$_dog_$][$_cat_$]

$regex_pattern 是什么?

谢谢

【问题讨论】:

  • 感谢您提供的好例子和解释。但。你试过什么?
  • preg_match_all("/^[\$__\$]$/", $str, $normalPets);
  • 请注意,当我发布此内容时,它删除了 dog 之前和 dog 之后的下划线。应该是 [$_dog_$]

标签: php regex preg-match-all


【解决方案1】:

应该是:

$regex_pattern = '/\[\$_.+_\$\]/U';

【讨论】:

  • 捕获组不需要
  • 你也应该包括下划线
  • 添加下划线并删除捕获组
  • 谢谢。你是一个正则表达式天才,虽然它存储了 [$_dog_$] 和 [$_cat_$] 两次。我可以用数组函数来处理这个问题,但是正则表达式模式中是否存在导致找到的值被存储 2 倍的东西?
  • 原因是结果在 $normalPets 中的存储方式。第一个条目用于整个匹配,所有以下条目(在您的情况下只有一个)用于所有子模式。除非您使用 PREG_SET_ORDER 常量作为第四个参数 $normalPets[0] 应该包含您的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
相关资源
最近更新 更多