如何在PHP中使用正则表达式来获得双反斜杠之后的东西

时间:2016-05-10 10:11:13

标签: php regex

我有这句话

C:\\wamp\\www\\callCenter\\joomlatools-files\\docman-files\\test.pdf

我希望得到正则表达式测试的结果,但不使用句子中的其他单词。

我的正则表达式是~\\\(.+)\.pdf~,但结果是wamp\www\portail-callcenter\joomlatools-files\docman-files\test。 有人可以解释一下如何完成它吗?

4 个答案:

答案 0 :(得分:2)

我不确定你想要得到什么。但我想你想从你的第一句话中得到test这个词。所以使用这种模式:

~\\\\(\w+)\.pdf$~

然后$1包含您需要的内容。

Online Demo

  • ~分隔符
  • \\\\按字面意思匹配两个反斜杠
  • (抓取小组$1 (包含您需要的内容)
  • \w+匹配一个或多个字母,数字或下划线
  • \.按字面匹配
  • $字符串结尾

以下是问题~\\\(.+)\.pdf~中的模式。您的模式问题是.+。因为它意味着一个或多个字符(每个字符甚至\。因此,您的模式匹配字符串开头的两个反斜杠,其余的反斜杠将匹配每个字符.+)。

为避免这种情况,您必须使用\w代替任何字母,数字或下划线。在这种情况下,匹配的部分将只是test

答案 1 :(得分:1)

你的正则表达式几乎是正确的。唯一的事情是它匹配最终单词中的每种类型的角色。将其更改为

~\\\\([^\\]+)\.pdf~

除了最后一个单词中的\之外,其他所有内容都匹配 - 您应该只获取文件名。

此致

答案 2 :(得分:1)

test获取C:\\wamp\\www\\callCenter\\joomlatools-files\\docman-files\\test.pdf

(?<=\\\\)[^.\\]+(?=\.[^.\\]+$)

https://groups.google.com/forum/#!msg/gremlin-users/AetuGcLiBxo/KW966WAyAQAJ

您可以通过使用组来获取所需部分来避免外观:

\\\\([^.\\]+)\.[^.\\]+$

答案 3 :(得分:1)

<?php
$subject = 'C:\\\\wamp\\\\www\\\\callCenter\\\\joomlatools-files\\\\docman-files\\\\test.pdf';

echo $subject; // C:\\wamp\\www\\callCenter\\joomlatools-files\\docman-files\\test.pdf

preg_match_all('~\\\\\\\\([^\\\\]+)\.pdf$~', $subject, $match);
var_dump($match);

结果

array (size=2)
  0 => 
    array (size=1)
      0 => string '\\test.pdf' (length=10)
  1 => 
    array (size=1)
      0 => string 'test' (length=4)

如果你想匹配双反斜杠,你的正则表达式需要8个反斜杠。在第一级中,解析脚本行中的字符串输入,并将反斜杠视为元字符,以转义后续字符。结果,你的正则表达式中仍有4个斜线。执行正则表达式时,会对反斜杠和元字符进行处理,因此仍需要2个斜杠与主题字符串进行比较。

echo '~\\\\\\\\([^\\\\]+)\.pdf$~';  // ~\\\\([^\\]+)\.pdf$~