Что нового

[RegExp] Найти строки НЕ содержащие определённого слова

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Необходимо с помощью регулярного выражения найти строки не содержащие слова "Offline".

Код:
$sText = '...<table>'
$sText &= '<tr><td>Pervyj</td><td>Zdes</td></tr>'
$sText &= '<tr><td>Vtoroj</td><td>Offline</td></tr>'
$sText &= '<tr><td>Tretij</td><td>Tam</td></tr>'
$sText &= '<tr><td>4etwertyj</td><td>Gde-to rjadom</td></tr>'
$sText &= '</table>...'

$aOnline = StringRegExp($sText, '<tr>(.*?)</tr>', 3) ;Без Offline?

If Not IsArray($aOnline) Or UBound($aOnline, 0) <> 1 Then Exit

For $i = 0 To UBound($aOnline)-1 Step +1
	ConsoleWrite($i+1 & ':' & StringRegExpReplace($aOnline[$i], '(<.*?>)+', ' ') & @LF)
Next



Добавлено:
Сообщение автоматически объединено:

Решил так:

Код:
$sText = '...<table>'
$sText &= '<tr><td>Pervyj</td><td>Zdes</td></tr>'
$sText &= '<tr><td>Vtoroj</td><td>Offline</td></tr>'
$sText &= '<tr><td>Tretij</td><td>Tam</td></tr>'
$sText &= '<tr><td>4etwertyj</td><td>Gde-to rjadom</td></tr>'
$sText &= '</table>...'

$aOnline = StringRegExp($sText, '<tr>(<td>[^<]*?</td><td>(?!Offline)[^<]*?</td>)</tr>', 3)

If Not IsArray($aOnline) Or UBound($aOnline, 0) <> 1 Then Exit

For $i = 0 To UBound($aOnline)-1 Step +1
    ConsoleWrite($i+1 & ':' & StringRegExpReplace($aOnline[$i], '(<.*?>)+', ' ') & @LF)
Next
 

Бублик2010

Новичок
Сообщения
14
Репутация
0
А как быть, если в строке есть символ перехода? то есть текст отличается от
$sText &= '<tr><td>Vtoroj</td><td>Offline</td></tr>'

и в реальности выглядит так:
<tr><td>Vto
roj</td><td>Off
line</td></tr>


Что добавить в паттерн, чтобы обьять строку между <tr></tr> и убрать символы перехода?
 

SyDr

Сидра
Сообщения
651
Репутация
158
О_О
StringRegExp уже используют для поиска констант?

Бублик2010
StringReplace - заменить @CRLF на "". Дальше можно, как обычно работать.
 
Автор
D

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Добавить (?s) в начало шаблона, тогда точка учитывает и новую строку.

А вообще имхо в данном случае лучше использовать StringInStr(), StringRegExp для этих целей не предназначен.
 
Верх