正则如何匹配第一个的

和最后一个

lxm88168 2013-06-07 02:15:56
比如文章如下
<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>

匹配出<p>1111111</p>中的</p>
和最后一段<p>7777777</p>的</p>
正则如何弄?
...全文
546 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxm88168 2013-06-13
  • 打赏
  • 举报
回复
引用 11 楼 hnxxwyq 的回复:
[quote=引用 10 楼 ywq0127 的回复:] [quote=引用 8 楼 lxm88168 的回复:] [quote=引用 7 楼 ywq0127 的回复:] [quote=引用 5 楼 ywq0127 的回复:] 如果只是想要匹配</p>的话,可以不用正则吧。 PHP5,现在应该没有谁用PHP4吧。。。

$str = '<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>';
$fp = stripos($str, '</p>');
$first = substr($str, $fp, 4);
$ep = stripos($str, '</p>');
$end = substr($str, $ep, 4);
写错了,$ep = strripos($str, '</p>'); 楼上兄弟和我想一样了[/quote] 其实我是要第一段的后面追加一些文字、和最后一段也追加一些文字[/quote] 也可以使用这种啊,得出了两个'</p>'的位置,在把字符切一下再加上你要加的文字。 不过如果字符串本身很大的话,这个效率不怎么样。[/quote] 不用切,找出位置直接替换就可以

<?php 
$s='<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>';
print strlen($s);

$find = '</p>';
$find_len = 4; //</p> 长度

$s = substr_replace($s, $find."第一个p", stripos($s,'</p>'), $find_len);
$s = substr_replace($s, $find."最后一个p", strripos($s,'</p>'), $find_len);

print $s;
[/quote] 这个可以
lazyboy_wu 2013-06-07
  • 打赏
  • 举报
回复
引用 10 楼 ywq0127 的回复:
[quote=引用 8 楼 lxm88168 的回复:] [quote=引用 7 楼 ywq0127 的回复:] [quote=引用 5 楼 ywq0127 的回复:] 如果只是想要匹配</p>的话,可以不用正则吧。 PHP5,现在应该没有谁用PHP4吧。。。

$str = '<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>';
$fp = stripos($str, '</p>');
$first = substr($str, $fp, 4);
$ep = stripos($str, '</p>');
$end = substr($str, $ep, 4);
写错了,$ep = strripos($str, '</p>'); 楼上兄弟和我想一样了[/quote] 其实我是要第一段的后面追加一些文字、和最后一段也追加一些文字[/quote] 也可以使用这种啊,得出了两个'</p>'的位置,在把字符切一下再加上你要加的文字。 不过如果字符串本身很大的话,这个效率不怎么样。[/quote] 不用切,找出位置直接替换就可以

<?php 
$s='<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>';
print strlen($s);

$find = '</p>';
$find_len = 4; //</p> 长度

$s = substr_replace($s, $find."第一个p", stripos($s,'</p>'), $find_len);
$s = substr_replace($s, $find."最后一个p", strripos($s,'</p>'), $find_len);

print $s;
ywq0127 2013-06-07
  • 打赏
  • 举报
回复
引用 8 楼 lxm88168 的回复:
[quote=引用 7 楼 ywq0127 的回复:] [quote=引用 5 楼 ywq0127 的回复:] 如果只是想要匹配</p>的话,可以不用正则吧。 PHP5,现在应该没有谁用PHP4吧。。。

$str = '<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>';
$fp = stripos($str, '</p>');
$first = substr($str, $fp, 4);
$ep = stripos($str, '</p>');
$end = substr($str, $ep, 4);
写错了,$ep = strripos($str, '</p>'); 楼上兄弟和我想一样了[/quote] 其实我是要第一段的后面追加一些文字、和最后一段也追加一些文字[/quote] 也可以使用这种啊,得出了两个'</p>'的位置,在把字符切一下再加上你要加的文字。 不过如果字符串本身很大的话,这个效率不怎么样。
xuzuning 2013-06-07
  • 打赏
  • 举报
回复
$s =<<< TXT
<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>
TXT;
echo preg_replace('#(</p>)(.+)(</p>)#s', '$1aaa$2$3BBB', $s);
<p>1111111</p>aaa <p>2222222</p> <p>33333333</p> <p>4444444</p> <p>55555555</p> <p>66666666</p> <p>7777777</p>BBB
引用 8 楼 lxm88168 的回复:
[quote=引用 7 楼 ywq0127 的回复:] [quote=引用 5 楼 ywq0127 的回复:] 如果只是想要匹配</p>的话,可以不用正则吧。 PHP5,现在应该没有谁用PHP4吧。。。

$str = '<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>';
$fp = stripos($str, '</p>');
$first = substr($str, $fp, 4);
$ep = stripos($str, '</p>');
$end = substr($str, $ep, 4);
写错了,$ep = strripos($str, '</p>'); 楼上兄弟和我想一样了[/quote] 其实我是要第一段的后面追加一些文字、和最后一段也追加一些文字[/quote]
lxm88168 2013-06-07
  • 打赏
  • 举报
回复
引用 7 楼 ywq0127 的回复:
[quote=引用 5 楼 ywq0127 的回复:] 如果只是想要匹配</p>的话,可以不用正则吧。 PHP5,现在应该没有谁用PHP4吧。。。

$str = '<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>';
$fp = stripos($str, '</p>');
$first = substr($str, $fp, 4);
$ep = stripos($str, '</p>');
$end = substr($str, $ep, 4);
写错了,$ep = strripos($str, '</p>'); 楼上兄弟和我想一样了[/quote] 其实我是要第一段的后面追加一些文字、和最后一段也追加一些文字
ywq0127 2013-06-07
  • 打赏
  • 举报
回复
引用 5 楼 ywq0127 的回复:
如果只是想要匹配</p>的话,可以不用正则吧。 PHP5,现在应该没有谁用PHP4吧。。。

$str = '<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>';
$fp = stripos($str, '</p>');
$first = substr($str, $fp, 4);
$ep = stripos($str, '</p>');
$end = substr($str, $ep, 4);
写错了,$ep = strripos($str, '</p>'); 楼上兄弟和我想一样了
sxldfang 2013-06-07
  • 打赏
  • 举报
回复
别用正则了

<?php 
$s='<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>';
print strlen($s);
print stripos($s,'</p>');
print strripos($s,'</p>');
?>

运行结果:
113
10
109
ywq0127 2013-06-07
  • 打赏
  • 举报
回复
如果只是想要匹配</p>的话,可以不用正则吧。 PHP5,现在应该没有谁用PHP4吧。。。

$str = '<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>';
$fp = stripos($str, '</p>');
$first = substr($str, $fp, 4);
$ep = stripos($str, '</p>');
$end = substr($str, $ep, 4);
xuzuning 2013-06-07
  • 打赏
  • 举报
回复
$s =<<< TXT
<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>
TXT;
preg_match('#(</p>).+(</p>)#s', $s, $r);
print_r($r);
Array ( [0] => </p> <p>2222222</p> <p>33333333</p> <p>4444444</p> <p>55555555</p> <p>66666666</p> <p>7777777</p> [1] => </p> [2] => </p> )
一起混吧 2013-06-07
  • 打赏
  • 举报
回复
preg_match_all('/^<p>.+(<\/p>)|<p>.+(<\/p>)$/U',$s,$m);
lxm88168 2013-06-07
  • 打赏
  • 举报
回复
引用 1 楼 jordan102 的回复:
preg_match_all('/^<p>.+<\/p>|<p>.+<\/p>$/U',$s,$m);
这样匹配到的是整一段了 我要的只是一个</p>
一起混吧 2013-06-07
  • 打赏
  • 举报
回复
preg_match_all('/^<p>.+<\/p>|<p>.+<\/p>$/U',$s,$m);

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧