【问题标题】:PHP regex match capital htmlPHP正则表达式匹配大写html
【发布时间】:2014-12-14 19:27:20
【问题描述】:

我正在制作一个小型 linux 驱动的 PHP 实用程序,用于从 Windows 服务器获取网页和图像。除了文件名和引用之外,一切都运行良好。 Windows 不介意大写字母,但 linux 客户端介意。

提供的文件包含有时用大写字母引用的链接,有时不。

我正在使用大写字母保存所有文件,没有问题。

在使用 curl 将网页转换为字符串后,我希望确保“网页字符串”中的任何链接 - 到其他“内部”htmlpages 是正确的。

文件被引用为“A1.HTML”、“a23.hTmL”、“A123.htm”、“a2.html”、“a213.HTML”等。

常见的模式是:链接总是以(或 A)开头,后跟一个计数器(1 到 999)和扩展名 .html(或 .htm 或 .HTM 或 .HTML)

代码:

function get_url(){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $_SESSION['GETURL']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);

// Now the page is stored in $output

// Replace a|A\d{1,999}\.[HTML|html|Html|htm|Htm|HTM] with A <NUMBER FROM BEFORE> <dot> HTML

// maybe use preg_replace

示例(问题页面“A3.HTML”):

之前:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>MYTITLE</TITLE><META HTTP-EQUIV='refresh' content='8;URL=A3.HTML'> ...........

或:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>MYTITLE</TITLE><META HTTP-EQUIV='refresh' content='8;URL=A3.html'> ...........

或:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>MYTITLE</TITLE><META HTTP-EQUIV='refresh' content='8;URL=a3.HTML'> ...........

或:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>MYTITLE</TITLE><META HTTP-EQUIV='refresh' content='8;URL=A3.HTML'> ...........

非常感谢任何帮助形成合适的函数以确保字符串格式的帮助。

提前致谢

/尼尔斯

【问题讨论】:

  • 这不是操作系统的事情,而是文件系统的事情。 Windows/OS X 默认使用不区分大小写的格式,但 Linux 使用区分大小写的格式。可能的其他方法:使用不区分大小写的文件系统制作分区/磁盘映像/ram 磁盘并提供该文件夹。将所有文件名设为小写,并使用 mod_rewrite 之类的东西将请求的文件路径小写。
  • 在 apache 中激活 mod_speling 也可以解决问题。

标签: php regex


【解决方案1】:

这应该可以解决问题:

// Replace a|A\d{1,999}\.[HTML|html|Html|htm|Htm|HTM] with A <NUMBER FROM BEFORE> <dot> HTML
$content = preg_replace('/a(\d{1,3})\.html?/i','A$1.HTML',$output);

preg_replace /i modifier 表示正则表达式不区分大小写。替换字符串中的$1backreference - 这意味着它将从匹配字符串(在本例中为数字)中获取捕获的组并将其应用于替换。

【讨论】:

  • \\d 还是\d
  • @Tryth 无需逃避!!检查the manual
  • @Enissay 哎呀!浑然不觉。现在已编辑帖子以删除不必要的反斜杠。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 2020-08-06
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
相关资源
最近更新 更多