如何在php中使用regex来获得双反斜杠后的内容


how to use regex in php to get something after double back slash

我有这句话

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

我想得到正则表达式压缩测试的结果,但不使用句子中的另一个单词。

我的正则表达式是~'''(.+)'.pdf~,但结果是wamp'www'portail-callcenter'joomlatools-files'docman-files'test。有人能解释一下怎么做吗?

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

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

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

在线演示

  • ~分隔符
  • ''''从字面上匹配两个反斜杠
  • (捕获组$1(其中包含您需要获得的内容)
  • 'w+匹配一个或多个字母、数字或下划线
  • '.与点完全匹配
  • $字符串末尾

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

为了避免这种情况,您必须使用'w,这意味着任何字母、数字或下划线。在这种情况下,匹配的部分将仅为test

您的正则表达式几乎是正确的。唯一的问题是它匹配最后一个单词中的每一种类型的字符。将其更改为

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

这将匹配除最后一个单词中的'之外的所有内容,并且您应该只获得文件名。

问候

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

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

演示

你可以通过使用一个组来获得所需的部分来避免环视:

''''([^.'']+)'.[^.'']+$
<?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个斜杠。执行regex时,反斜杠和元字符一样被处理,因此仍有2个斜杠需要与主题字符串进行比较。

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