PHP 正则表达式匹配,匹配所有以数字开头后跟句点的行
PHP Regex match, match all lines that begin with number followed by period
我使用 simple_html_dom
来解析一些 HTML 并在名为 $pre
的数组中得到以下 HTML Table
现在,如何使用 PHP 正则表达式来仅获取与以下结果匹配的行?
<table>
<tr>
<td>
<pre>1. APEAL/890/2010 HUSSAIN ISMAIL SATWILKAR SHRI C.K. PENDSE</pre>
</td>
</tr>
<tr>
<td>
<pre> [Criminal] MS.ROHINI DANDEKAR ADV.AP</pre>
</td>
</tr>
<tr>
<td>
<pre> V/S THE STATE OF MAHARASH PTD AS PER CTS ORD 7/9/17</pre>
</td>
</tr>
<tr>
<td>
<pre> TRA P.P.FOR P. P</pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre> REMARK : (By Accused against Conviction) Note: (1) Matter is Ready for final</pre>
</td>
</tr>
<tr>
<td>
<pre> hearing. (2) Accd. is in jail. (3) R & P with PB received. (4)</pre>
</td>
</tr>
<tr>
<td>
<pre> Muddemal article are to be called for. (5) Report received from</pre>
</td>
</tr>
<tr>
<td>
<pre> Nashik Central Prison stated therein that "Orig. accd. death dated</pre>
</td>
</tr>
<tr>
<td>
<pre> 20/11/2015 (Report kept at flag "A") . ....... Court (DB) for final</pre>
</td>
</tr>
<tr>
<td>
<pre> hearing.</pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre>2. APEAL/966/2011 ABDUL MALIK SHAIKH SHRI S. R. MITHARE</pre>
</td>
</tr>
<tr>
<td>
<pre> [Criminal]</pre>
</td>
</tr>
<tr>
<td>
<pre> V/S THE STATE OF MAHARASH</pre>
</td>
</tr>
<tr>
<td>
<pre> TRA</pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre> REMARK : (By Accused Against Conviction) Note:- (1) Matter is ready for</pre>
</td>
</tr>
<tr>
<td>
<pre> Final Hearing. (2) Original Accused is in Jail. (3) R & P received</pre>
</td>
</tr>
<tr>
<td>
<pre> with PaperBooks. (4) Muddemal Articles are to be called for. (5)</pre>
</td>
</tr>
<tr>
<td>
<pre> Report received from Kolhapur central Prison stated therein that</pre>
</td>
</tr>
<tr>
<td>
<pre> "Orig. Accused expired on 19/04/2015 (Report kept at flag "A")</pre>
</td>
</tr>
<tr>
<td>
<pre> - Court D.B. for Final Hearing.</pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre>3. APEAL/486/2012 AJAY SITARAM BHARATI MISS. TANU KHATTRI</pre>
</td>
</tr>
<tr>
<td>
<pre> [Criminal]</pre>
</td>
</tr>
</table>
使用正则表达式后的结果:
<pre>1. APEAL/890/2010 HUSSAIN ISMAIL SATWILKAR SHRI C.K. PENDSE</pre>
<pre>2. APEAL/966/2011 ABDUL MALIK SHAIKH SHRI S. R. MITHARE</pre>
<pre>3. APEAL/486/2012 AJAY SITARAM BHARATI MISS. TANU KHATTRI</pre>
使用此代码:preg_match('^\<pre\>\d2*\./gm', $pre[$i])
returns:
preg_match(): No ending delimiter '^' found
这看起来像是要使用的正确正则表达式,它来自 regex101:
^ asserts position at start of the string
\< matches the character < literally (case sensitive)
pre matches the characters pre literally (case sensitive)
\> matches the character > literally (case sensitive)
\d matches a digit (equal to [0-9])
2* matches the character 2 literally (case sensitive)
* Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)
\. matches the character . literally (case sensitive)
Global pattern flags
g modifier: global. All matches (don't return after first match)
php preg_*
函数需要一个定界符 - 模式中未使用的符号。
此外,您的模式不会正确匹配。这样做的原因是 ^
匹配行的开头。并且 pre
标签没有开始几个标签。
此正则表达式将匹配位于同一行且至少以一个数字(例如 1、16、256 等)和句点开头的任何 pre
标记。
preg_match('#(<pre>\d+\..*</pre>)#', $pre[], $matches);
vaR_dump($matches);
在这个例子中,我使用 #
作为分隔符。
这是您需要的:
#<pre>(?<line>\d+\..+)<\/pre>#
显然你知道 pre 是什么。括号表示捕获组,我将其命名为 'line',方法是将 ?<line>
放在括号中。
然后它会查找数字 \d+\
、文字点 \.
、任何 .+
后跟结束标记。
$regex = '#<pre>(?<line>\d+\..+)<\/pre>#';
preg_match_all($regex, $html, $matches);
foreach($matches['line'] as $line) {
echo $line ."\n";
}
输出:
1. APEAL/890/2010 HUSSAIN ISMAIL SATWILKAR SHRI C.K. PENDSE
2. APEAL/966/2011 ABDUL MALIK SHAIKH SHRI S. R. MITHARE
这是实际操作:https://regex101.com/r/6U8S9C/1
运行 php:https://3v4l.org/QoVsY
我使用 simple_html_dom
来解析一些 HTML 并在名为 $pre
现在,如何使用 PHP 正则表达式来仅获取与以下结果匹配的行?
<table>
<tr>
<td>
<pre>1. APEAL/890/2010 HUSSAIN ISMAIL SATWILKAR SHRI C.K. PENDSE</pre>
</td>
</tr>
<tr>
<td>
<pre> [Criminal] MS.ROHINI DANDEKAR ADV.AP</pre>
</td>
</tr>
<tr>
<td>
<pre> V/S THE STATE OF MAHARASH PTD AS PER CTS ORD 7/9/17</pre>
</td>
</tr>
<tr>
<td>
<pre> TRA P.P.FOR P. P</pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre> REMARK : (By Accused against Conviction) Note: (1) Matter is Ready for final</pre>
</td>
</tr>
<tr>
<td>
<pre> hearing. (2) Accd. is in jail. (3) R & P with PB received. (4)</pre>
</td>
</tr>
<tr>
<td>
<pre> Muddemal article are to be called for. (5) Report received from</pre>
</td>
</tr>
<tr>
<td>
<pre> Nashik Central Prison stated therein that "Orig. accd. death dated</pre>
</td>
</tr>
<tr>
<td>
<pre> 20/11/2015 (Report kept at flag "A") . ....... Court (DB) for final</pre>
</td>
</tr>
<tr>
<td>
<pre> hearing.</pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre>2. APEAL/966/2011 ABDUL MALIK SHAIKH SHRI S. R. MITHARE</pre>
</td>
</tr>
<tr>
<td>
<pre> [Criminal]</pre>
</td>
</tr>
<tr>
<td>
<pre> V/S THE STATE OF MAHARASH</pre>
</td>
</tr>
<tr>
<td>
<pre> TRA</pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre> REMARK : (By Accused Against Conviction) Note:- (1) Matter is ready for</pre>
</td>
</tr>
<tr>
<td>
<pre> Final Hearing. (2) Original Accused is in Jail. (3) R & P received</pre>
</td>
</tr>
<tr>
<td>
<pre> with PaperBooks. (4) Muddemal Articles are to be called for. (5)</pre>
</td>
</tr>
<tr>
<td>
<pre> Report received from Kolhapur central Prison stated therein that</pre>
</td>
</tr>
<tr>
<td>
<pre> "Orig. Accused expired on 19/04/2015 (Report kept at flag "A")</pre>
</td>
</tr>
<tr>
<td>
<pre> - Court D.B. for Final Hearing.</pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre></pre>
</td>
</tr>
<tr>
<td>
<pre>3. APEAL/486/2012 AJAY SITARAM BHARATI MISS. TANU KHATTRI</pre>
</td>
</tr>
<tr>
<td>
<pre> [Criminal]</pre>
</td>
</tr>
</table>
使用正则表达式后的结果:
<pre>1. APEAL/890/2010 HUSSAIN ISMAIL SATWILKAR SHRI C.K. PENDSE</pre>
<pre>2. APEAL/966/2011 ABDUL MALIK SHAIKH SHRI S. R. MITHARE</pre>
<pre>3. APEAL/486/2012 AJAY SITARAM BHARATI MISS. TANU KHATTRI</pre>
使用此代码:preg_match('^\<pre\>\d2*\./gm', $pre[$i])
returns:
preg_match(): No ending delimiter '^' found
这看起来像是要使用的正确正则表达式,它来自 regex101:
^ asserts position at start of the string
\< matches the character < literally (case sensitive)
pre matches the characters pre literally (case sensitive)
\> matches the character > literally (case sensitive)
\d matches a digit (equal to [0-9])
2* matches the character 2 literally (case sensitive)
* Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)
\. matches the character . literally (case sensitive)
Global pattern flags
g modifier: global. All matches (don't return after first match)
php preg_*
函数需要一个定界符 - 模式中未使用的符号。
此外,您的模式不会正确匹配。这样做的原因是 ^
匹配行的开头。并且 pre
标签没有开始几个标签。
此正则表达式将匹配位于同一行且至少以一个数字(例如 1、16、256 等)和句点开头的任何 pre
标记。
preg_match('#(<pre>\d+\..*</pre>)#', $pre[], $matches);
vaR_dump($matches);
在这个例子中,我使用 #
作为分隔符。
这是您需要的:
#<pre>(?<line>\d+\..+)<\/pre>#
显然你知道 pre 是什么。括号表示捕获组,我将其命名为 'line',方法是将 ?<line>
放在括号中。
然后它会查找数字 \d+\
、文字点 \.
、任何 .+
后跟结束标记。
$regex = '#<pre>(?<line>\d+\..+)<\/pre>#';
preg_match_all($regex, $html, $matches);
foreach($matches['line'] as $line) {
echo $line ."\n";
}
输出:
1. APEAL/890/2010 HUSSAIN ISMAIL SATWILKAR SHRI C.K. PENDSE
2. APEAL/966/2011 ABDUL MALIK SHAIKH SHRI S. R. MITHARE
这是实际操作:https://regex101.com/r/6U8S9C/1
运行 php:https://3v4l.org/QoVsY