Регулярное выражение для получения полной строки, если она не содержит определенного символа?

Мне нужна помощь с регулярным выражением, которое будет находить совпадения в строках ниже:

myDOG_test

мойCAT_test

По сути, я хочу вернуть «СОБАКУ» или «КОШКУ» из этих путей.

Затем у меня есть похожие строки (все начинаются с «мой»), которые не содержат подчеркивания ПОСЛЕ нужного мне значения, и в этом случае я просто хочу вернуть ПОЛНУЮ строку — в группе соответствия.

myCentralReports

мой DEMO3

Это REGEXP, который у меня есть до сих пор:

.*?my(.*?)\_.*

Это правильно помещает CAT & DOG в соответствующую группу, но у меня возникают проблемы с сопоставлением двух других строк. Очевидно, я оставил там жестко закодированное подчеркивание, чтобы показать вам, с чего я начал, но мне нужно изменить его для другого случая. Любая помощь приветствуется! Спасибо.


person tresstylez    schedule 28.01.2011    source источник


Ответы (3)


'/\smy(.+?)[_|\s]/'

Это позволит получить что-либо между символом пробела, за которым следует «my», и следующим завершающим символом подчеркивания или символом пробела. попробуй.

person dqhendricks    schedule 28.01.2011
comment
Это дало мне хороший старт. В итоге я подобрался как можно ближе, а затем обработал остальное в коде (выполнив поиск и замену). - person tresstylez; 28.01.2011

Не уверен, зачем вам нужно регулярное выражение:

explode('_', $string);

Первый элемент будет содержать myDOG или myDEMO3. Удалите 'my', если необходимо, неясно, хотите ли вы 'my' во втором случае.

person SilentGhost    schedule 28.01.2011

Вы можете сделать:

$list = array(' myDOG_test', 'myCAT_test',' myCentralReports', 'myDEMO3');

foreach($list as $elem) {
  preg_match("/^\s*my(.+?)(?:_|$)/", $elem, $m);
  echo "$elem : matches = ";print_r($m);
}

Вывод:

 myDOG_test : matches = Array
(
    [0] =>  myDOG_
    [1] => DOG
)
myCAT_test : matches = Array
(
    [0] => myCAT_
    [1] => CAT
)
 myCentralReports : matches = Array
(
    [0] =>  myCentralReports
    [1] => CentralReports
)
myDEMO3 : matches = Array
(
    [0] => myDEMO3
    [1] => DEMO3
)
person Toto    schedule 28.01.2011