извлечь последние 2 поля независимо от размера - PullRequest
1 голос
/ 24 июня 2019

Я пытался получить последние "два поля" из следующих строк:

cc-api-data.bar.bar
external-atl3-1.xx.fbcdn.net
fbcdn.net

для первых 2 строк, я хотел бы получить только "bar.bar" и "fbcdn.сеть."Тем не менее, для последней строки я хочу, чтобы она соответствовала всему, поскольку в ней есть все, что я хочу.

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

Любые предложения или это вообще возможно

1 Ответ

1 голос
/ 24 июня 2019

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

([^.]*)\.([^.]*)$

к правой стороне наших струн.

Дополнительную информацию см. В демоверсии

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

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

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

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

...