⑴ php正则匹配如何截取前200个字符,跪求大神解答
如下是一个测试脚本,
<?php
$str
=
"abcd123456";
$pattern
=
'/^(.{0,6}).*?$/i'
preg_match($pattern,
$str,
$matches);
print_r($matches);
效果如下图:
我看了你的$pattern,即/^(.{0,200}).*?$/i首先你使用了^.......$这个结构表示精确匹配某个字符串,逐个分析你的表达式,首先(.{0,200})表示匹配除"
"外的0到200个字符,而^表示以(.{0,200})开头,而后面的.*表示0个或多个单个字符,而.*?结合起来则表示使用懒惰模式,匹配任意数量的重复个字符,/i表示去区分大小写,使用你的$pattern应该可以达到效果,同样使用preg_match语法的话,则preg_match($pattern,
$str,
$matches);然后$matches[1]就会输出第一个0到200字符组成的串(有200则输出200个,没有则输出所有)
⑵ PHP 正则表达式 100分就是你的了!!
我不会PHP 只会正则。按照你给的html,(?<=name=").*?(?=") 可以匹配第一个,(?<=id=").*?(?=") 可以匹配第二个。注意,我这么写是因为name和id这个属性在你给的html语句中都是唯一的,如果不唯一那么就要重新写条件。
⑶ php如何进行正则替换
按照你的要求把h后的数字和w后的任意数字替换成固定数的php程序如下
<?php
$fix='555';//固定数
$str='asdasda/w/100/h/200/q/sdasdsad';
$regex1="~h/[0-9]+~";
$result=preg_replace($regex1,"h/".$fix,$str);
$regex2="~w/[0-9]+~";
$result=preg_replace($regex2,"w/".$fix,$result);
print_r($result);
?>
运行结果
asdasda/w/555/h/555/q/sdasdsad
⑷ PHP 正则表达式截取HTML
正则查询的时候 使用 preg_match_all 函数吧
他能获取 所有匹配的 字符串然后装进 数组里。
还有你说的 多个行里的 匹配 找不出来 , 需要加 修饰符 s
可以这样 preg_match_all("/<form>(.+)<\/form>/isU" , $string, $tea)
这里/ 后面加了 3个修饰符
i 是 不区分大小写的匹配
s 是 带有换行的 匹配
U 是非贪婪模式。匹配最少部分。
⑸ php正则表达式 取页面指定内容
你好,现在ip138的ip地址没有直接显示在http://www.ip138.com/中 而是用的iframe,打开源文件可以看到:
<iframe src="http://www.ip138.com/ip2city.asp" frameborder="0" scrolling="no" width="100%" height="100%"></iframe>
所以你的 $str中没有[]括起来的字符串,匹配失败。
应该这样:
$countfile="http://www.ip138.com/ip2city.asp/";
$mode="\[(.*)\]";//正则表达式 //简单匹配[]中的所有内容,即ip地址
$str=file_get_contents($countfile);
preg_match($mode,$str,$arr);
print_r($arr);
⑹ PHP正则表达式高手来啊
你好,我虽然没学过PHP,但是为了帮助你(还有你的100分)也稍微看了一下,这里说一下我的见解..不对的还请见谅
首先我不建议楼主先获取字符串数组再用循环一一替换,看了一下preg_replace这个方法,我自己仿写了一个
<?php
$string = "[<a href=?c=12&a=&l=2&p=2>2</a>] [<a href=?c=12&a=&l=2&p=3>3</a>] [<a href=?c=12&a=&l=2&p=4>4</a>] [<a href=?c=12&a=&l=2&p=5>5</a>] [<a href=?c=12&a=&l=2&p=6>6</a>] [<a href=?c=12&a=&l=2&p=7>7</a>] [<a href=?c=12&a=&l=2&p=8>8</a>] [<a href=?c=12&a=&l=2&p=9>9</a>] [<a href=?c=12&a=&l=2&p=10>10</a>] [<a href=?c=12&a=&l=2&p=2>下一页</a>]";
$pattern = "/(\?c=)(\d+)(&a=&l=2&p=)(\d+)/g";
$replacement = "/list/\\2-\\4.html";
print preg_replace($pattern, $replacement, $string);
?>
上面的代码是替换,先取得字符串,再替换,再拆分,这样可以少一步循环
下面是拆分的正则表达式,根据[]作判断,看了楼主写的好象有点不太明白取什么,我这里是取的每一个[],正则表达式为
/\[[^\]]*\]+?/g
说明一下每个符号的作用
\[ :转义为符号"[" , \]意思相同
取[]中间的那些非"]"的内容, 最后的\]+?是非贪婪匹配,意思是取到一个符合的就停止,这样不会把整个字符串都取了,如果楼主不想要两端的[], 可以改成这样
/(?<=\[)[^\]]*(?=\])+?/g
不消费两端的[]号
以上代码我没在PHP里运行,只在别的语言上试了下可以,见笑了~~
PS:第一段代码中$pattern正则中的&号必须要写成"& amp ;"(无空格) 网络里不让打出来,切记!
⑺ 求个php的验证文本框内容的正则表达式
^[\p{Han}\p{N}\p{P}]{2,100}$
最好放入单引号中,并且使用unicode
'/^[\p{Han}\p{N}\p{P}]{2,100}$/u'
应该可以包括汉字、标点和数字
⑻ 急急急,PHP关于正则表达式的问题
根据你写的这一句,表达式可以用:'/<a[^>]*href=([\'\"])([^\'\">]*)\\1[^>]*>/i'
如果链接的文字也要获取的话,用'/<a[^>]*href=([\'\"])([^\'\">]*)\\1[^>]*>(.*?)<\/a>/i'