Регулярное выражение, чтобы получить полную строку, если она не содержит конкретного символа? - PullRequest
0 голосов
/ 28 января 2011

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

myDOG_test

myCAT_test

По сути, я хочу вернуть 'DOG' или 'CAT' из этих путей.

Затем у меня есть похожие строки (все начинаются с 'my'), которые не содержат подчеркивания ПОСЛЕ нужного значения, и в этом случае я просто хочу вернуть строку FULL - в группе совпадений.

myCentralReports

myDEMO3

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

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

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

Ответы [ 3 ]

2 голосов
/ 28 января 2011

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

explode('_', $string);

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

0 голосов
/ 28 января 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
)
0 голосов
/ 28 января 2011
'/\smy(.+?)[_|\s]/'

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

...