【问题标题】:Regex: how to match the last dot in a string正则表达式:如何匹配字符串中的最后一个点
【发布时间】:2010-07-26 02:55:53
【问题描述】:

我有两个示例文件名字符串:

jquery.ui.min.js
jquery.ui.min.css

我可以使用什么正则表达式来匹配最后一个点?我不需要其他任何东西,只需要最后一个点。

更多关于我正在做的事情。我正在使用 PHP 的 preg_split() 函数将文件名拆分为一个数组。该函数删除所有匹配项,并为您提供一个包含拆分之间元素的数组。我试图让它将 jquery.ui.min.js 拆分成一个如下所示的数组:

array[0] = jquery.ui.min
array[1] = js

【问题讨论】:

  • 匹配最后一个点并不难,结果是.。您的意思是“最后一个点之后的所有内容”,即“扩展名”吗?
  • 我只想要最后一个点,没有别的。我想出了使用 \..[^\.]+$ 匹配扩展名现在我需要自己获取点。

标签: php regex


【解决方案1】:

如果您要提取字符串的最后一部分,您需要:

\.([^.]*)$

如果您不想要 .

(\.[^.]*)$

如果你这样做了。

【讨论】:

  • 正是我想要的。使用它在文件扩展名之前(以及之后的任何参数)将 _small 添加到文件 URL。 var prodImg = cartItem.image.replace(/(\.[^.]*)$/, "_small$1");
【解决方案2】:

我认为你会很难使用preg_splitpreg_match 应该是更好的选择。

preg_match('/(.*)\.([^.]*)$/', $filename, $matches);

或者,看看pathinfo
或者,只需两行即可:

$filename = substr($file, 0, strrpos($file, '.'));
$extension = substr($file, strrpos($file, '.') + 1);

【讨论】:

  • 酷! pathinfo() 完全符合我的需要。谢谢!
  • 同意。没有理由为此需要使用正则表达式。
  • 虽然 php.net 上没有示例,但 pathinfo 也适用于外部 url。所以pathinfo('http://somehost.com/some/path/some.file') 也可以。
  • 请大家注意最后一行代码,$extension = substr($file, strrpos($file, '.') + 1); 在处理诸如.htaccess 之类的隐藏文件时可能会产生不希望的结果。它返回 htaccess 而不是空字符串。 pathinfo('url or path')['extension'] 在我看来是更好的选择。
【解决方案3】:

从表面上看,没有理由为此使用正则表达式。以下是使用针对静态字符串解析优化的函数的 2 种不同方法:

选项 1:

$ext = "jquery.ui.min.css";
$ext = array_pop(explode('.',$ext));
echo $ext;

选项 2:

$ext = "jquery.ui.min.css";
$ext = pathinfo($ext);
echo $ext['extension'];

【讨论】:

  • pathinfo() 似乎是此任务最快的功能。 Regexp 花费了 4.5、array_pop 4 和 pathinfo() 3 个相对时间单位来完成任务。
  • 注意:pathinfo() 可以识别区域设置,因此要正确解析包含多字节字符的路径,必须使用setlocale() 函数设置匹配的区域设置。
【解决方案4】:
\.[^.]*$

【讨论】:

    【解决方案5】:

    在匹配最后一个“部分”时,我需要排除最后一个点

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

    【讨论】:

      【解决方案6】:

      使用积极的前瞻性,我得到了这个答案:

      \.(?=\w+$)
      

      此答案专门匹配字符串中的最后一个点。

      【讨论】:

        【解决方案7】:

        我用过 - 试试看:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多