Jump to content
  • 0

регулярка


stars
 Share

Question

если строка 

<b>123</b><b>332</b><b>624</b><b>724</b><b>881</b><b>dsnkjds<df2dsjkds</b>

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

 

Я пробовал так:

|<b>.+2.+</b>|U|<b>[^<]+2[^<]+</b>|U

Однако в ответах были ошибки "332</b><b>624" и во втором случае на попало "dsnkjds<df2dsjkds" а оно полностью удовлетворяет условиям

 

Link to comment
Share on other sites

Recommended Posts

  • 0
/[^>]+2[^<]+/g

судя по тому что мы получим:

 

Array ( [0] => Array ( [0] => 123 [1] => 624 [2] => 724 [3] => dsnkjds

Это тоже не верный ответ ))) И модификатора g в php нет )) Хотя ТС не оговорил какой язык нужен.

 

Как понял я, но ТС это не описал, вывод нужен вот такой:

 

Array ( [0] => Array ( [0] => 123 [1] => 624 [2] => 724 [3] => dsnkjds<df2dsjkds

Тоесть нужны все вхождения где есть 2, но находится она должна не по краям

Link to comment
Share on other sites

  • 0

Тьфу, это для php. Не знаю, какие там особенности, но в js отрабатывает как надо, последняя группа матчится полностью.

 

Хотя даже странно, использованы только базовые возможности, что тут может пойти не так...

 

UPD. Да, в php последняя группа матчится неверно. Забавно...

Link to comment
Share on other sites

  • 0

 

Тьфу, это для php. Не знаю, какие там особенности, но в js отрабатывает как надо, последняя группа матчится полностью.

 

Хотя даже странно, использованы только базовые возможности, что тут может пойти не так...

 

Хотя ТС не оговорил какой язык нужен.

так что ваш вариант может и подойти. Просто чисто логически не понятно зачем в js вообще разбирать теги регуляркой )))

Edited by wwt
Link to comment
Share on other sites

  • 0

Да это не мой вариант, просто мне он понравился краткостью. И с точки зрения логики работы регулярок должен делать как раз то, что надо. Просто я протестировал его сразу на js, а оказывается вот оно как...

Link to comment
Share on other sites

  • 0

Вообще из регулярки ТС кристально ясно, что JS тут не при чём. В JS регулярку пайпами нельзя ограничивать, только обратные слеши или тупо строка. Ну и ветка "Серверные технологии" как бы намекает...

Link to comment
Share on other sites

  • 0

Да уже понятно, что скорее всего php, но, блин, почему в нем работает иначе...

Хз, но сама регулярка, предложенная nerv неверная. Во-первых, туда не попадает подстрока 881, а во-вторых, туда не должна вообще попадать строка dsnkjds<df2dsjkds, т.к. стоит [^<]. Так что у меня мнение, что в JS чо-то не так работает.

Link to comment
Share on other sites

  • 0

нет, там все верно.

 

Строка 881, как я понимаю, вообще не должна попасть в результаты (может я неправильно понял условие, но двойка внутри тега быть должна, просто не в начале и не в конце содержимого).

 

И строка dsnkjds<df2dsjkds тоже попадает правильно — двойка не стоит непосредственно перед символом <, поэтому совпадение есть.

Link to comment
Share on other sites

  • 0

Вот так вроде работает:

|<b>(?:(?!</b>).)+2(?:(?!</b>).)+</b>|

так в выборку попадут значения с 2 по краям, вот так нужно:

/<b>((?:(?!<\/b>)[^2])+2(?:(?!<\/b>)[^2])+)<\/b>/
array (  0 =>   array (    0 => '<b>123</b>',    1 => '<b>624</b>',    2 => '<b>724</b>',    3 => '<b>dsnkjds<df2dsjkds</b>',  ),  1 =>   array (    0 => '123',    1 => '624',    2 => '724',    3 => 'dsnkjds<df2dsjkds',  ),)

 

Edited by wwt
Link to comment
Share on other sites

  • 0
не по теме конечно... смотрю на ники Great Rash и rash - дежавю, не дежавю... аж голова кругом

ждем человека с ником "rash Rash Great great" =)

 

Вообще из регулярки ТС кристально ясно, что JS тут не при чём. В JS регулярку пайпами нельзя ограничивать, только обратные слеши или тупо строка. Ну и ветка "Серверные технологии" как бы намекает...

да, я в курсе и ничего не перепутал. Написал регулярку на js, т.к. js песочница была ближе под рукой.

 

Да уже понятно, что скорее всего php, но, блин, почему в нем работает иначе...

с какой стати? http://sandbox.onlinephpfunctions.com/code/6e4f1ad1966dd014be6051cf10a349da95dc8496 "execute code" 

Link to comment
Share on other sites

  • 0
не по теме конечно... смотрю на ники Great Rash и rash - дежавю, не дежавю... аж голова кругом

Судя по его дате регистрации, плагиатор я. 


с какой стати?

А вот с такой. Запустите тот же скрипт тут: http://www.compileonline.com/execute_php_online.php Результаты будут отличаться. Может из-за того, что версии пых разные?

Link to comment
Share on other sites

  • 0

А вот с такой

С какой с "такой"?  :)  "Движок" регулярок один - Perl-совместимые. Т.е. все регулярки написанные в JS работают в PHP. Но, не все регулярные выражения написанные в PHP будут работать в JS, т.к. в регулярах PHP большей возможностей (фич).

 

 

 

Запустите тот же скрипт

Запустил. Результат тот же

<html><head><title>Online PHP Script Execution</title></head><body><?php     $text = '<b>123</b><b>332</b><b>624</b><b>724</b><b>881</b><b>dsnkjds<df2dsjkds</b>';  preg_match_all('/[^>]+2[^<]+/', $text, $r);   ?><textarea style="width:400px;height:400px"><?php  echo print_r($r);?></textarea></body></html>
upd: надеюсь, сам поймете, почему у вас был другой результат =) Edited by nerv
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy