2013-04-11 4 views
0

Я очень новичок в регулярном выражении, и, честно говоря, это меня пугает. Мне нужно захватить строку после достижения определенного символа в указанной строке. Я подумал, что самый простой способ сделать это - использовать регулярное выражение, но, как я уже сказал, я очень к нему знаком. Может ли кто-нибудь помочь мне с этим или указать мне в правильном направлении?Регулярное выражение для удаления символов до определенного символа?

Например: Мне нужно проверить строку «23444: thisstring» и сохранить «thisstring» в новой строке.

+2

Вы можете добавить образец кода, входы и желаемый результат? – Brad

+2

Можете ли вы привести конкретный пример? –

+3

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

ответ

4

Если это ваша строка:

I'm very new at regex, and to be completely honest it confounds me 

и вы хотите, чтобы захватить все после первого «c», это регулярное выражение будет работать:

/c(.*)/s 

Она возвращает этот матч в первой согласованной группе:

"ompletely honest it confounds me" 

попробовать это в регулярное выражение тестер здесь: regex tester

Объяснение:

  • c является характер вы ищете
  • .* (in co. mbination with /s) соответствует всем оставленным
  • (.*) фиксирует .* совпадение, делает его доступным в $1 и возвращается в контексте списка.
+0

Спасибо за отличное объяснение и пример кода! – Twisterz

+0

'/.*? C (. *)/S' не прерывается, если строка содержит символы новой строки, а' /^.*? C (. *)/S' может иметь огромное значение в производительности, что также может записываться как '/ c (. *)/s'. – ikegami

1

Регулярное выражение для удаления символов до определенного символа!

Вы можете использовать предпросмотр как этот

.*(?=x) 

где х представляет собой конкретный символ или слово или строка. {Используя символы, такие как ., $, ^, *, + имеют особое значение в регулярных выражениях так что не «забудьте, чтобы избежать при использовании его в х}


EDIT

для вашей строки выборки было бы

.*(?=thisstring) 

.* матчи 0 до многих персонажей до thisisstring

+0

Это хороший ответ, но что, если я не знаю, что будет после «:». Это всегда будет randomstring: otherrandomstring. – Twisterz

+0

@Twisterz вы попросили Regex для удаления символов до ** определенного ** символа. Вы никогда не упоминали ** случайный ** в своем вопросе. Будьте конкретны с вашим вопросом .. я не мог ответить на ваш вопрос. .am fear – Anirudha

0

Вот одна линия решение для согласования все после того, как «до»

print $1."\n" if "beforeafter" =~ m/before(.*)/; 

Edit: При использовании просмотра назад возможно, это не требуется. Группировка обеспечивает более легкое решение.

0

Чтобы получить строку до: в вашем примере, вы должны использовать [^:][^:]*:\(.*\). Обратите внимание, что у вас должно быть хотя бы одно [^:], за которым следует любое число [^:] s, за которым следует фактическое:, персонаж, который вы ищете.

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