⑴ 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'