2012-05-24 2 views
2

Я пытаюсь отделить хосты из этого файла, но мое регулярное выражение выбирает оба хоста вместе:.Regex соответствует стекаться из *

timestamps|||scan_start|Tue May 1 23:00:29 2012|timestamps||foo.com|host_start|Tue May 1  23:16:51 2012|results|-0017\ntimestamps||foo.com|host_end|Tue May 1 23:19:17  2012|timestamps||bar.com|host_start|Tue May 1 23:24:31 2012|results|general/tcp|Sendmail 8.13.8\n\n\ntimestamps||bar.com|host_end|Tue May 1 23:29:11 2012|timestamps|||scan_end|Wed May 2 00:19:40 2012| 

регулярное выражение:

timestamps\|\|[\w,\.]*\|host_start.*host_end 

ответ

3

сделать звезду ленивых:

timestamps\|\|[\w,.]*\|host_start.*?host_end 

.* является "жадным", соответствие, насколько это возможно. .*? «ленив» и подходит как можно меньше, чтобы достичь матча. Поэтому он будет соответствовать только до ближайшего host_end, а не до последнего.

Кроме того, нет необходимости избегать точки внутри класса символов. И действительно ли вы хотите разрешить запятую в классе символов, или вы имели в виду [\w.]*?

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