PHP Regex match, соответствует всем строкам, которые начинаются с номера, за которым следует точка - PullRequest
0 голосов
/ 15 мая 2018

Я использовал simple_html_dom, чтобы проанализировать некоторый HTML и получить следующую таблицу HTML, которая в массиве с именем $pre

Теперь, как я могу использовать регулярное выражение PHP, чтобы получить только те строки, которые соответствуют результатуниже?

<code><table>
    <tr>
        <td>
            <pre>1.   APEAL/890/2010     HUSSAIN ISMAIL SATWILKAR        SHRI C.K. PENDSE
[Criminal]                                         MS.ROHINI DANDEKAR ADV.AP
V/S THE STATE OF MAHARASH       PTD AS PER CTS ORD 7/9/17
                        TRA                             P.P.FOR  P. P
    
REMARK : (By Accused against Conviction) Note: (1) Matter is Ready for final
hearing. (2) Accd. is in jail. (3) R & P with PB received. (4)
Muddemal article are to be called for. (5) Report received from
Nashik Central Prison stated therein that "Orig. accd. death dated
20/11/2015 (Report kept at flag "A") . ....... Court (DB) for final
hearing.
    
   
    
2.   APEAL/966/2011     ABDUL MALIK SHAIKH              SHRI S. R. MITHARE
[Criminal]
V/S THE STATE OF MAHARASH
TRA
    
REMARK : (By Accused Against Conviction) Note:- (1) Matter is ready for
Final Hearing. (2) Original Accused is in Jail. (3) R & P received
with PaperBooks. (4) Muddemal Articles are to be called for. (5)
Report received from Kolhapur central Prison stated therein that
"Orig. Accused expired on 19/04/2015 (Report kept at flag "A")
- Court D.B. for Final Hearing.
    
    
    
3.   APEAL/486/2012     AJAY SITARAM BHARATI            MISS. TANU KHATTRI
[Criminal]

Результат после использования Regex:

<code><pre>1.   APEAL/890/2010     HUSSAIN ISMAIL SATWILKAR        SHRI C.K. PENDSE
2.   APEAL/966/2011     ABDUL MALIK SHAIKH              SHRI S. R. MITHARE
3.   APEAL/486/2012     AJAY SITARAM BHARATI            MISS. TANU KHATTRI

Использование этого кода:preg_match('^\<pre\>\d2*\./gm', $pre[$i]) возвращает: 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)

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вот что вам нужно:

#<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

0 голосов
/ 15 мая 2018

Для функций php preg_* требуется разделитель - символ, который не используется в шаблоне.

Кроме того, ваш шаблон не будет соответствовать правильно. Причина этого в том, что ^ соответствует самому началу строки. И тег pre не запускается для нескольких вкладок.

Это регулярное выражение будет соответствовать любому тегу pre, находящемуся в той же строке, который начинается как минимум с одного числа (например, 1, 16, 256 и т. Д.) И точки.

<code>preg_match('#(<pre>\d+\..*
) # ', $ pre [$ 1], $ match); var_dump (соответствует $);

В этом примере я использовал # в качестве разделителя.

...