有几个正则表达式的问题请教高手
时间:2007-02-17 来源:PHP爱好者
第一个问题:
$a1 = "aaaaaaaaa<table><tr><td><a href='http://test.com/test.asp?id=15'>主题</a></td></tr></table>aaa";
如何得到http://test.com/test.asp?id=15这个网址?
第二个问题:
$b1 = "
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr><td>共有300条记录,现在为第1页</td></tr>
<tr><td>
<a href='test.asp?page=1&id=15'>1</a>
<a href='test.asp?page=2&id=15'>2</a>
<a href='test.asp?page=3&id=15'>3</a>
<a href='test.asp?page=4&id=15'>4</a>
</td></tr>
</table>
";
如何把判断共有 4 页,并将4页的url存进数组。然后使用for循环读出?
test.asp?page=1&id=15
test.asp?page=2&id=15
test.asp?page=3&id=15
test.asp?page=4&id=15
windlike 回复于:2005-03-02 09:03:58 从别的论坛看到的解决第一个问题的方法:
方法 I
preg_match("/href='([^']*?)'>/", $a1, $match);
$url = $match[1];
方法 II
eregi("<a.+href='?(.*)'>主题",$a1,$regs);
echo $regs[1]."n";
jacketble 回复于:2005-03-02 09:13:38 <?
$a1 = "aaaaaaaaa<table><tr><td><a href='http://test.com/test.asp?id=15'>主题</a></td></tr></table>aaa";
$a=ereg_replace(".+(a href=')(.+)('>)(.+)","2",$a1);
echo $a;
?>
<?
$b1 = "
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr><td>共有300条记录,现在为第1页</td></tr>
<tr><td>
<a href='test.asp?page=1&id=15'>1</a>
<a href='test.asp?page=2&id=15'>2</a>
<a href='test.asp?page=3&id=15'>3</a>
<a href='test.asp?page=4&id=15'>4</a>
</td></tr>
</table>
";
$b=explode("href",$b1);
for($i=1;$i<count($b);$i++)
{
$ok[$i-1]=ereg_replace("(=')(.+)('>.+)","2",$b[$i]);
}
for($i=0;$i<count($ok);$i++)
echo $ok[$i].'<br>';
?>
windlike 回复于:2005-03-02 09:38:39 多谢多谢.问题已经解决.
那位能解释一下下面表达式中的pattern语法?
ereg_replace(".+(a href=')(.+)('>)(.+)","2",$a1);
windlike 回复于:2005-03-02 10:15:41 下面是我找到的资料,拿来供和我一样刚接触正则表达式的朋友参考:
ereg_replace ()函数说明:
string ereg_replace ( string pattern, string replacement, string string)
本函数在 string 中扫描与 pattern 匹配的部分,并将其替换为 replacement。
返回替换后的字符串。(如果没有可供替换的匹配项则会返回原字符串。)
如果 pattern 包含有括号内的子串,则 replacement 可以包含形如 digit 的子串,这些子串将被替换为数字表示的的第几个括号内的子串; 则包含了字符串的整个内容。最多可以用九个子串。括号可以嵌套,此情形下以左圆括号来计算顺序。
如果未在 string 中找到匹配项,则 string 将原样返回。
上面贴子 正则表达式中 用的几个 特殊字符 的说明如下:
// "." 匹配除“n”之外的任何单个字符
// "+" 一次或多次匹配前面的字符或子表达式
// "" 将下一字符标记为特殊字符、文本、反向引用或八进制转义符
// (pattern) 匹配 pattern 并捕获该匹配的子表达式
jacketble 回复于:2005-03-02 10:18:04 ereg_replace
(PHP 3, PHP 4 , PHP 5)
ereg_replace -- 替换正则表达式
说明
string ereg_replace ( string pattern, string replacement, string string)
本函数在 string 中扫描与 pattern 匹配的部分,并将其替换为 replacement。
返回替换后的字符串。(如果没有可供替换的匹配项则会返回原字符串。)
如果 pattern 包含有括号内的子串,则 replacement 可以包含形如 digit 的子串,这些子串将被替换为数字表示的的第几个括号内的子串; 则包含了字符串的整个内容。最多可以用九个子串。括号可以嵌套,此情形下以左圆括号来计算顺序。
如果未在 string 中找到匹配项,则 string 将原样返回。
例如,下面的代码片断输出 "This was a test" 三次:
例子 1. ereg_replace() 例子
<?php
$string = "This is a test";
echo ereg_replace (" is", " was", $string);
echo ereg_replace ("( )is", "1was", $string);
echo ereg_replace ("(( )is)", "2was", $string);
?>
非常全面的一个php技术网站,php 爱好者站 http://www.phpfans.net 有相当丰富的文章和源代码.
$a1 = "aaaaaaaaa<table><tr><td><a href='http://test.com/test.asp?id=15'>主题</a></td></tr></table>aaa";
如何得到http://test.com/test.asp?id=15这个网址?
第二个问题:
$b1 = "
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr><td>共有300条记录,现在为第1页</td></tr>
<tr><td>
<a href='test.asp?page=1&id=15'>1</a>
<a href='test.asp?page=2&id=15'>2</a>
<a href='test.asp?page=3&id=15'>3</a>
<a href='test.asp?page=4&id=15'>4</a>
</td></tr>
</table>
";
如何把判断共有 4 页,并将4页的url存进数组。然后使用for循环读出?
test.asp?page=1&id=15
test.asp?page=2&id=15
test.asp?page=3&id=15
test.asp?page=4&id=15
windlike 回复于:2005-03-02 09:03:58 从别的论坛看到的解决第一个问题的方法:
方法 I
preg_match("/href='([^']*?)'>/", $a1, $match);
$url = $match[1];
方法 II
eregi("<a.+href='?(.*)'>主题",$a1,$regs);
echo $regs[1]."n";
jacketble 回复于:2005-03-02 09:13:38 <?
$a1 = "aaaaaaaaa<table><tr><td><a href='http://test.com/test.asp?id=15'>主题</a></td></tr></table>aaa";
$a=ereg_replace(".+(a href=')(.+)('>)(.+)","2",$a1);
echo $a;
?>
<?
$b1 = "
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr><td>共有300条记录,现在为第1页</td></tr>
<tr><td>
<a href='test.asp?page=1&id=15'>1</a>
<a href='test.asp?page=2&id=15'>2</a>
<a href='test.asp?page=3&id=15'>3</a>
<a href='test.asp?page=4&id=15'>4</a>
</td></tr>
</table>
";
$b=explode("href",$b1);
for($i=1;$i<count($b);$i++)
{
$ok[$i-1]=ereg_replace("(=')(.+)('>.+)","2",$b[$i]);
}
for($i=0;$i<count($ok);$i++)
echo $ok[$i].'<br>';
?>
windlike 回复于:2005-03-02 09:38:39 多谢多谢.问题已经解决.
那位能解释一下下面表达式中的pattern语法?
ereg_replace(".+(a href=')(.+)('>)(.+)","2",$a1);
windlike 回复于:2005-03-02 10:15:41 下面是我找到的资料,拿来供和我一样刚接触正则表达式的朋友参考:
ereg_replace ()函数说明:
string ereg_replace ( string pattern, string replacement, string string)
本函数在 string 中扫描与 pattern 匹配的部分,并将其替换为 replacement。
返回替换后的字符串。(如果没有可供替换的匹配项则会返回原字符串。)
如果 pattern 包含有括号内的子串,则 replacement 可以包含形如 digit 的子串,这些子串将被替换为数字表示的的第几个括号内的子串; 则包含了字符串的整个内容。最多可以用九个子串。括号可以嵌套,此情形下以左圆括号来计算顺序。
如果未在 string 中找到匹配项,则 string 将原样返回。
上面贴子 正则表达式中 用的几个 特殊字符 的说明如下:
// "." 匹配除“n”之外的任何单个字符
// "+" 一次或多次匹配前面的字符或子表达式
// "" 将下一字符标记为特殊字符、文本、反向引用或八进制转义符
// (pattern) 匹配 pattern 并捕获该匹配的子表达式
jacketble 回复于:2005-03-02 10:18:04 ereg_replace
(PHP 3, PHP 4 , PHP 5)
ereg_replace -- 替换正则表达式
说明
string ereg_replace ( string pattern, string replacement, string string)
本函数在 string 中扫描与 pattern 匹配的部分,并将其替换为 replacement。
返回替换后的字符串。(如果没有可供替换的匹配项则会返回原字符串。)
如果 pattern 包含有括号内的子串,则 replacement 可以包含形如 digit 的子串,这些子串将被替换为数字表示的的第几个括号内的子串; 则包含了字符串的整个内容。最多可以用九个子串。括号可以嵌套,此情形下以左圆括号来计算顺序。
如果未在 string 中找到匹配项,则 string 将原样返回。
例如,下面的代码片断输出 "This was a test" 三次:
例子 1. ereg_replace() 例子
<?php
$string = "This is a test";
echo ereg_replace (" is", " was", $string);
echo ereg_replace ("( )is", "1was", $string);
echo ereg_replace ("(( )is)", "2was", $string);
?>
非常全面的一个php技术网站,php 爱好者站 http://www.phpfans.net 有相当丰富的文章和源代码.
相关阅读 更多 +