Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почему не находит соответствие именованой группе?
 
 автор: senglory   (10.08.2009 в 18:33)   письмо автору
 
 

Вот такой регекс


<div\s+class="useddetails-right\s+wid342\s+fl">
\s*
<div\s+class="padbot5"(?:[^>]*?)>
\s*
<h4\s+class="darkred">
(?<ModelName>.+?(?=</h4>))</h4>
\s*
</div>
\s*
<div\s+class="fl"(?:[^>]*?)>
\s*
<table\s+class="used-details\s+wid342"\s+cellspacing="0">
\s*

# Price
<tr>
\s*<td\s+width="175"\s+class="grey11">Цена</td>\s*
<td\s+class="b11\s+b">(?<PriceCurrency>[^<]*?){0,1}<span\s+class="red11">
(?<Price>.+?(?=</span>))</span></td>
\s*
</tr>
\s*

# Year
<tr>
\s*<td\s+class="grey11">Год\s+выпуска:</td>\s*
<td\s+class="b11\s+b">(?<Year>.+?(?=</td>))</td>
\s*
</tr>
\s*

# Mileage
<tr>
\s*<td\s+class="grey11">Пробег:</td>\s+
<td\s+class="b11\s+b">(?<Mileage>.+?(?=</td>))</td>
\s*
</tr>
\s*

# Body
<tr>
\s*<td\s+class="grey11">Тип\s+кузова:</td>\s*
<td\s+class="b11">(?<Body>.+?(?=</td>))</td>
\s*
</tr>
\s*

(
# Color
<tr>
\s*<td\s+class="grey11">Цвет:</td>\s*
<td\s+class="b11">(?<Color>.+?(?=</td>))</td>
\s*
</tr>
\s*
){0,1}

# Engine Size
<tr>
\s*<td\s+class="grey11">Объем\s+двигателя:</td>\s*
<td\s+class="b11\s+b">(?<EngineSize>.+?(?=</td>))</td>
\s*
</tr>
\s*



(
# Power
<tr>
\s*<td\s+class="grey11">Мощность:</td>\s*
<td\s+class="b11\s+b">(?<Power>.+?(?=</td>))</td>
\s*
</tr>
\s*
){0,1}

# Engine Type
<tr>
\s*<td\s+class="grey11">Тип\s+двигателя:</td>\s*
<td\s+class="b11">(?<EngineType>.+?(?=</td>))</td>
\s*
</tr>
\s*

(
# Drive
<tr>
\s*<td\s+class="grey11">Привод:</td>\s*
<td\s+class="b11">(?<Drive>.+?(?=</td>))</td>
\s*
</tr>
\s*
){0,1}

# Transmission
<tr>
\s*<td\s+class="grey11">Трансмиссия:</td>\s*
<td\s+class="b11\s+b">(?<Transmission>.+?(?=</td>))</td>
\s*
</tr>
\s*

(
# Interior
<tr>
\s*<td\s+class="grey11">Салон:</td>\s*
<td\s+class="b11">(?<Interior>.+?(?=</td>))</td>
\s*
</tr>
\s*
){0,1}

# Used
<tr>
\s*<td\s+class="grey11">Состояние:</td>\s*
<td\s+class="b11">(?<Used>.+?(?=</td>))</td>
\s*
</tr>
\s*



# Region
<tr>
\s*<td\s+class="grey11">Регион:</td>\s*
<td\s+class="b11\s+b">(?<Region>.+?(?=</td>))</td>
\s*
</tr>
\s*

</table>
\s*

#Fucked AD
(
<div\s+class="wid342\s+fl\s+padtop15">
\s*
<div\s+class="linkicon\s+listicon\s+lh16">
\s*
<a(?:[^>]*?)>
(?:.+?)</a>\s*</div>\s*</div>
){0,1}
\s*
</div>
\s*

(
# Amenities
<div\s+class="wid342\s+fl\s+mtop10(?:[^>]*?)>
\s*
<div\s+class="pad10">
(?:.+?)
<ul\s+class="chkbox">
(?<Amenities>.+?)
</ul>
\s*
</div>
){0,1}



(?:.+?)

#Extra
(

\s*    
<div\s+class="b10\s+lh16\s+vpad10">
(?<Extra>.+?)\s*
</div>
)
{0,1}



Вот такой текст





  
                                </div>


  
                                <div class="useddetails-right wid342 fl">


  
                                    <div class="padbot5" style="border-bottom:1px solid #B3C3D0; margin: 0 0 10px 0;">


  
                                        <h4 class="darkred">Skoda Octavia LS</h4>


  
                                    </div>


  
                                    


  
                                    <div class="fl" style="clear:both">


  
                                        <table class="used-details wid342" cellspacing="0">


  
                                            <tr>


  
                                                <td width="175" class="grey11">Цена</td>


  
                                                <td class="b11 b">$<span class="red11">9100</span></td>


  
                                            </tr>


  
                                            <tr>


  
                                                <td class="grey11">Год выпуска:</td>


  
                                                <td class="b11 b">2000 г.</td>


  
                                            </tr>


  
                                            


  
                                            <tr>


  
                                                <td class="grey11">Пробег:</td>


  
                                                <td class="b11 b">200000 км</td>


  
                                            </tr>


  
                                            


  
                                            <tr>


  
                                                <td class="grey11">Тип кузова:</td>


  
                                                <td class="b11">Седан</td>


  
                                            </tr>


  
                                            


  
                                            <tr>


  
                                                <td class="grey11">Цвет:</td>


  
                                                <td class="b11">зеленый</td>


  
                                            </tr>


  
                                            


  
                                            <tr>


  
                                                <td class="grey11">Объем двигателя:</td>


  
                                                <td class="b11 b">1600 л</td>


  
                                            </tr>


  
                                            


  
                                            <tr>


  
                                                <td class="grey11">Тип двигателя:</td>


  
                                                <td class="b11">Бензиновый</td>


  
                                            </tr>


  
                                            


  
                                            <tr>


  
                                                <td class="grey11">Привод:</td>


  
                                                <td class="b11">Передний</td>


  
                                            </tr>


  
                                            


  
                                            <tr>


  
                                                <td class="grey11">Трансмиссия:</td>


  
                                                <td class="b11 b">Механическая</td>


  
                                            </tr>


  
                                            


  
                                            <tr>


  
                                                <td class="grey11">Салон:</td>


  
                                                <td class="b11">Велюр</td>


  
                                            </tr>


  
                                            


  
                                            <tr>


  
                                                <td class="grey11">Состояние:</td>


  
                                                <td class="b11">Подержанный</td>


  
                                            </tr>


  
                                            


  
                                            <tr>


  
                                                <td class="grey11">Регион:</td>


  
                                                <td class="b11 b">Пермь</td>


  
                                            </tr>


  
                                            


  
                                        </table>


  
                                        


  
                                    </div>


  
                                    


  
                                    <div class="wid342 fl mtop10" style="background:#F5F5F5">


  
                                        <div class="pad10">


  
                                            <h4 class="darkred">Комплектация</h4>


  
                                            <ul class="chkbox">


  
                                                <li class="par">


  
                                                    <ul>


  
                                                    


  
                                                        <li>ABS</li>


  
                                                    


  
                                                        <li>Акустическая система</li>


  
                                                    


  
                                                        <li>Гидроусилитель руля</li>


  
                                                    


  
                                                        <li>Иммобилайзер</li>


  
                                                    


  
                                                        <li>Кондиционер</li>


  
                                                    


  
                                                        <li>Корректор фар</li>


  
                                                    


  
                                                        <li>Литые диски</li>


  
                                                    


  
                                                        <li>Магнитола</li>


  
                                                    


  
                                                        <li>Рег. рулевая колонка</li>


  
                                                    


  
                                                    </ul>


  
                                                </li>


  
                                                <li class="par">


  
                                                    <ul>


  
                                                    


  
                                                        <li>Рег. сидений по высоте</li>


  
                                                    


  
                                                        <li>Сигнализация</li>


  
                                                    


  
                                                        <li>Спойлер</li>


  
                                                    


  
                                                        <li>Тонированные стекла</li>


  
                                                    


  
                                                        <li>Фаркоп</li>


  
                                                    


  
                                                        <li>Центральный замок</li>


  
                                                    


  
                                                    </ul>


  
                                                        


  
                                                </li>


  
                                            </ul>


  
                                        </div>


  
                                    </div>


  
                                    


  
                                    <div class="wid342 fl oh">


  
                                        <p class="vmargin10">


  
                                            <h4>Дополнительная информация</h4>


  
                                            <div class="b10 lh16 vpad10">


  
                                                ХОРОШЕЕ СОСТОЯНИЕ.ЧЕШСКАЯ ЗБОРКА.


  
                                            </div>


  
                                        </p>


  
                                    </div>


  
                                    


  
                                </div>


  
                                


  
                            </div>


  
                        </div>


  
                    </div>


  
                </div>


  
        
  
</noscript>


  



  
                </div>


  
                


  
                <div class="main">


  
                    <div class="title">


  
                        <h2 class="wb11 upper fl">Отправить сообщение продавцу</h2>


  



Почему он не находит группу Extra, т.е. "Дополнительная информация"?

  Ответить  
 
 автор: .........   (11.08.2009 в 01:06)
 
   для: senglory   (10.08.2009 в 18:33)
 

проще написать всё сначала , чем разбираться

, зато ещё один глюк в регексп
(?:(?:(?!</td)[^М])+
Мощность:</td>\s*<td\s+class="b11\s+b">
(?<Power>[^<]*)</td>)?
так всё работает

если вместо (?:(?!</td)[^М])+
сделать например (?:(?!</td)[^М]+)+
весь шаблон не совпадает даже хоть вся эта часть необязательно должна присутствовать

вообще вставил по привычке (?:(?!</td).[^М<]*)+ но такие дела, оказалось
$re ='@<div\s+class="useddetails-right\s+wid342\s+fl"> 
(?:(?!<h).[^<]*)+ 
<h4\s+class="darkred"> 
(?<ModelName>[^<]+)
[^Ц]+
Цена.+?<td\s+class="b11\s+b">
(?<PriceCurrency>[^<]*)<span\s+class="red11"> 
(?<Price>[^<]+)
[^Г]+ 
Год\s+выпуска:.+?<td\s+class="b11\s+b">
(?<Year>[^<]*)</td>
[^П]+ 
Пробег:</td>\s+ <td\s+class="b11\s+b">
(?<Mileage>[^<]*)
[^Т]+
Тип\s+кузова:</td>\s* <td\s+class="b11">
(?<Body>[^<]*)
[^Ц]+
Цвет:</td>\s*<td\s+class="b11">
(?<Color>[^<]*)</td>
[^О]+
Объем\s+двигателя:</td>\s*<td\s+class="b11\s+b">
(?<EngineSize>[^<]*)</td>

(?:(?:(?!</td)[^М])+
Мощность:</td>\s*<td\s+class="b11\s+b">
(?<Power>[^<]*)</td>)? # здесь придётся наверное такое что-то делать
                #  если учитывать необязательность
(?:(?:(?!</td)[^Т])+
Тип\s+двигателя:</td>\s*<td\s+class="b11">
(?<EngineType>[^<]*)</td>)?

[^П]+
Привод:</td>\s*<td\s+class="b11">
(?<Drive>[^<]*)
[^Т]+
Трансмиссия:</td>\s*<td\s+class="b11\s+b">
(?<Transmission>[^<]*)
[^С]+
Салон:</td>\s*<td\s+class="b11">
(?<Interior>[^<]*)
[^С]+
Состояние:</td>\s*<td\s+class="b11">
(?<Used>[^<]*)
[^Р]+
Регион:</td>\s*<td\s+class="b11\s+b">
(?<Region>.+?(?=</td>))
(?:(?!<h4).[^<]*)+
<h4[^>]*>Комплектация</h4\s*>
(?<xlist>(?:(?!</div).[^<]*)+) #здесь может надо было по </ul
# и ещё одну подмаску *непонял*
(?:(?!<h).[^<]*)+ 
<h4[^>]*>Дополнительная[^<]+<[^<]+
<div[^>]+>\s*
(?<Extra>[^<]*?)\s*<
@xs';

начал переписывать, запустил, дошёл до того что надо необязательные части сделать, и бросил
, не нравятся мне такие выражения ,)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования