1

我用 PHP 解析一个 XML 文件。我的问题是我有一个包含多行的动态字符串,每行没有空格字符,我想在该字符串上找到一个单词。字符串的长度是动态的,所以它每次都会改变。

由于字符串长度是动态的,我不能使用类似的东西,$c = substr($string, 0, -1)或者我不能使用类似的东西,$i=stripos($story," word");因为字符串中没有空格。

示例字符串是 4 行,我想在之前的第二行检测单词 ARC.docx </a>

<![CDATA[
In <a href='/home/Apps/ARCMeeting'>ARCMeeting</a>, You edited the file <a href='https://dropbox.com/get/Apps/ARCMeeting/ARC.docx?w=d3' title='&#47;Apps&#47;ARCMeeting&#47;ARC.docx'>ARC.docx</a>.
<br/>
]]>

我的目标是将之前第二行的 ARC.docx 添加</a>到消息正文中

$message='X File has been edited!';

所以我可以打印

$message='ARC.docx File has been edited!';

如何检测.......>exampleword</a>.上述字符串之间的单词?

提前致谢

4

2 回答 2

2

您可以尝试preg_match功能。

在你的情况下,它看起来像:

$subject = "In <a href='/home/Apps/ARCMeeting'>ARCMeeting</a>, You edited the file <a href='https://dropbox.com/get/Apps/ARCMeeting/ARC.docx?w=d3' title='&#47;Apps&#47;ARCMeeting&#47;ARC.docx'>ARC.docx</a>"

preg_match("/title=(.*)>(.*)<\/a>/U", $subject, $matches);

echo $matches[2]; // $matches[2] will contain `ARC.docx`
于 2012-09-20T15:35:19.500 回答
2

使用DOM 解析器,例如 PHP 内置的解析器。

$doc = new DOMDocument();

$html_string = <<<EOD
 <![CDATA[
 In <a href='/home/Apps/ARCMeeting'>ARCMeeting</a>, You edited the file <a href='https://dropbox.com/get/Apps/ARCMeeting/ARC.docx?w=d3' title='&#47;Apps&#47;ARCMeeting&#47;ARC.docx'>ARC.docx</a>.
 <br/>
 ]]>
EOD;

@$doc->loadHTML($html_string);

$urls = $doc->getElementsByTagName('a');

foreach ($urls as $url) {
 echo $url->nodeValue;
}

ARC.docx

于 2012-09-20T15:40:23.667 回答