在PHP中寻找正则表达式

时间:2012-06-11 11:59:23

标签: php regex

我在PHP中使用preg_match函数,以便从RSS Feed中提取一些值。在这个Feed内容中有这样的东西:

<li><strong>Something:</strong> A text with non alphanumeric characters (more text), more text with non alphanumeric characters (more text)</li>

我需要获取那些“带有非字母数字字符的文本”和“带有非字母数字字符的更多文本”以将它们保存在数据库中。我不知道使用正则表达式是否是最好的方法。

非常感谢你。

3 个答案:

答案 0 :(得分:1)

如果你想使用正则表达式(即快速和脏,不太可维护),这将给你文字:

$input = '<li><strong>Something:</strong> A text with non alphanumeric characters (more text), more text with non alphanumeric characters (more text)</li>';

// Match between tags
preg_match("#</strong>(.*?)</li>#", $input, $matches);
// Remove the text inside brackets
echo trim(preg_replace("#\s*\(.*?\)\s*#", '', $matches[1]));

但是,嵌套括号可能会失败。

答案 1 :(得分:0)

鉴于结构始终相同,您可以使用此正则表达式

</strong>([^,]*),([^<]*)</li>

组1将具有第一个片段,组2将具有另一个片段

一旦你开始使用正则表达式解析html / xml,很快就会发现一个完整的解析器更适合。对于小型或一次性解决方案,您可以使用正则表达式。

答案 2 :(得分:0)

$str = '<li><strong>Something:</strong> A text with non alphanumeric characters (more text), more text with non alphanumeric characters (more text)</li>';
$str = preg_replace('~^.*?</strong>~', '', $str); // Remove leading markup
$str = preg_replace('~</li>$~', '', $str); // Remove trailing markup
$str = preg_replace('~\([^)]++\)~', '', $str); // Remove text within parentheses
$str = trim($str); // Clean up whitespace
$arr = preg_split('~\s*,\s*~', $str); // Split on the comma