2016-07-25 3 views
0

У меня есть строка, которая выглядит следующим образом:не могу показаться, чтобы получить право PHP Regex квантор

msg": "log domain jl.lab.test.net server lab-jl-ppr-web" 

Я пытаюсь извлечь «jl.lab.test.net» и просто «Лаборатория-JL -ppr»из„лаборатории-JL-имп-сети“, используя следующее регулярное выражение:

preg_match("/\"msg\"\: \"log domain\s([\w*\.]*) server ([\w*\.\-]*)/i",$line,$matches); 

Вторая группа в настоящее время соответствует весь„лаборатория-JL-имп-веб“строку. Я пытался указать правильный квантификатор, но до сих пор я не получил правильного. Я пробовал следующее:

preg_match("/\"msg\"\: \"log domain\s([\w*\.]*) server ([\w*\.\-]*){3}/i",$line,$matches); 

Я продолжаю играть с ним, но если у вас есть какие-либо советы, я был бы признателен. Спасибо.

+0

пожалуйста, обновите ваш вопрос, чтобы включить несколько примеров, и планируемое окончательный вывод, формулировка, что в настоящее время используется делает его в заблуждение. – cmorrissey

+0

'[]' соответствует одному символу, '[] {3}' будет соответствовать 3 из указанных символов в строке. он НЕ будет соответствовать 3 SETS из 3-х символов. –

ответ

1

Почему просто не

/..snip.. server ([\w*\.\-]*)-web/i 

? Просто держите -web вне группы захвата.

0

Это кажется законным, но я уверен, что лучше можно написать.

^log domain ([a-zA-Z\.]+) server ([a-zA-Z\.\-]+)-web$ 

Здесь вы можете проверить его

LiveRegex

0

использовать следующий подход с preg_match_all функции:

$str = "log domain jl.lab.test.net server lab-jl-ppr-web"; 
preg_match_all("/\b\w+\.\w+\.\w+\.\w+\b|\b\w+-\w+-\w+(?=-\w+?)\b/U", $str, $matches); 

print_r($matches[0]); 

Выход:

Array 
(
    [0] => jl.lab.test.net 
    [1] => lab-jl-ppr 
) 
1

Это, вероятно, работает

'~"msg":[ ]"log[ ]domain\s([\w.]*)[ ]server[ ]((?:(?!-web)[\w.-])*)~' 

, но это трудно, чтобы получить то, что вы ищете из регулярных выражений.

Expanded

"msg": [ ] "log [ ] domain \s 
([\w.]*)     # (1) 
[ ] server [ ] 
(       # (2 start) 
     (?: 
      (?! -web) 
      [\w.-] 
    )* 
)        # (2 end) 

Выход

** Grp 0 - (pos 0 , len 52) 
"msg": "log domain jl.lab.test.net server lab-jl-ppr 
** Grp 1 - (pos 19 , len 15) 
jl.lab.test.net 
** Grp 2 - (pos 42 , len 10) 
lab-jl-ppr 

 Смежные вопросы

  • Нет связанных вопросов^_^