【问题标题】:Need to match multiple backslahes in a PHP regex需要在 PHP 正则表达式中匹配多个反斜杠
【发布时间】:2014-06-23 17:29:07
【问题描述】:

我正在尝试使用 preg_match 匹配 4 个反斜杠。

preg_match('/\\\\\\\\/',$subject) 工作正常,但 preg_match('/\\{4}/',$subject) 不行。

也许我使用了不正确的 {}。有人可以建议吗?

【问题讨论】:

  • 嗯,它对我来说很好用,regexr.com/391nd
  • 斯坦奇。我在 php 中得到 0 rtned。也许它是一个 php 的东西?
  • 你是对的,在 php 中它不起作用。不知何故,第二个反斜杠转义了{
  • 您需要 4 个反斜杠来匹配 1 个反斜杠。我在之前的answer 中解释了这一点
  • @HamZa 我总是害怕被欺骗警察抓到,无论我搜索得多么彻底——谷歌和stackoverflow搜索引擎。你在那里……就在队列中! ;) 链接的好答案,所以谢谢!

标签: php regex preg-match


【解决方案1】:

好的,我明白了:两个反斜杠意味着您希望字符串中有一个反斜杠:因此对于正则表达式,它看起来像这样:/\{4}/ 这意味着您想要转义 {

你需要的是:

preg_match('/\\\\{4}/', $subject);

寻找这样的正则表达式:/\\{4}/ 并正常工作。

【讨论】:

  • 奇怪的是双 \ 转义了 {
  • 这是最适合我的答案。非常感谢科尔伯顿。
【解决方案2】:

当您查找文字字符串时,Regex 是错误的工具。

strpos($subject, str_repeat("\\",4)) !== false

【讨论】:

  • 真的,好点,但我不只是在寻找一个文字字符串。为简单起见,我刚刚为您提供了失败的正则表达式部分。你不需要剩下的。
【解决方案3】:

使用这个:

preg_match('/(?:\\\\){2}/',$subject, $m);

它匹配 4 个反斜杠。

【讨论】:

  • 感谢 M42。我还没有测试它,但我不怀疑你(我很快就会测试它)。你能解释一下为什么在这种情况下需要一个非捕获组吗?
  • @dewd: 不确定 :) 但没有分组量词 {4} 只影响第二个反斜杠,所以表达式就像 \\\\` that is like a single ` 转义 { 然后不匹配。
  • 这对于正则表达式来说是这样的/(?:\){4}/,因为没有\)这样的东西,没有转义发生,反斜杠是字面意思。
  • 这似乎返回错误 - 因为错误。你测试了吗?
猜你喜欢
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 2023-03-13
  • 2017-05-07
  • 2016-04-15
  • 2020-10-28
  • 2014-05-13
相关资源
最近更新 更多