【发布时间】:2011-11-08 08:43:37
【问题描述】:
通常我会用这个正则表达式匹配 HTML 属性
\w+=".*?"
但是当 HTML 包含 PHP 代码时,它会变得有点奇怪。请考虑以下标签:
<option value="<?php echo $img; ?>"<?php echo ($hpb[$i]['image_filename']==$img?' selected="selected"':''); ?>>
<?php echo $img; ?>
</option>
上述正则表达式将匹配在 PHP 逻辑中确定的属性selected="selected"。有没有办法匹配不在 PHP 标签内的属性,同时仍然匹配其值可能包含 PHP 逻辑的属性?如果不能,我可以只删除不属于属性值的 PHP 代码吗?
编辑:这是我目前所拥有的:
\w+="(((.(?!<\?php))*?)|((.((?=<\?php).*?(?=\?>))*)*?))*"
这基本上意味着匹配以空格开头的字符串,然后贪婪地匹配字母数字字符后跟等号后跟双引号,然后匹配以下两个中的任何一个,同时捕获尽可能多的字符:
- 不包含字符串
<?php的字符序列 - 包含
<\?php.*?\?>模式的字符序列,或者换句话说,将属性的值部分与其所有 PHP 代码贪婪地匹配 所有这些直到遇到结束双引号......
【问题讨论】:
-
你到底想要什么??为什么要用这么复杂的
preg_match -
建议:不要使用正则表达式来操作 HTML 代码。使用特定的库/函数。
-
我试图只提取不在 标签内的属性。在我发布正确匹配的情况下,将返回 value="" 而不是 selected="selected" ,这取决于要输出的 PHP(在 PHP 标记内)。我忘了提到我将使用 javascript 的 match() 方法匹配正则表达式。
-
正则表达式应该在哪里运行,在 JavaScript 中还是在 PHP 中?因为如果它在客户端 JavaScript 中运行,那么 PHP 代码将不存在(显然它已经在服务器上运行)但如果它在 PHP 中,则没有理由将此问题标记为“javascript” .另外,如果你的正则表达式应该匹配 HTML 属性,它不应该包含一些东西来确保它只匹配 inside
<和>?
标签: javascript html regex match