Можно ли спасти мой отрицательный lookbehind пример для commifying чисел?

В "Усовершенствованном Регулярном Expresssion" глава в Освоении Perl, у меня есть поврежденный пример, для которого я не могу выяснить хорошую фиксацию. Пример, возможно, пытается быть слишком умным для его собственной пользы, но возможно кто-то может зафиксировать его для меня. Мог быть бесплатный экземпляр книги в нем для работы, фиксирует.:)

В разделе, говорящем о lookarounds, я хотел использовать отрицательный lookbehind для реализации commifying стандартной программы для чисел с дробными частями. Точка должна была использовать отрицательный lookbehind, потому что это было темой.

Я глупо сделал это:

$_ = '$1234.5678';
s/(?

(? утверждает что бит перед (?=(?:\d\d\d)+\b) не десятичная точка и цифра.

Глупая вещь не достаточно старается для повреждения его. Путем добавления другой цифры до конца, существует теперь группа из трех цифр, которым не предшествует десятичная точка и цифра:

$_ = '$1234.56789';
s/(?

Если бы lookbehinds мог бы быть переменной шириной в Perl, это было бы действительно легко. Но они не могут.

Обратите внимание, что легко сделать это без отрицательного lookbehind, но это не точка примера. Существует ли способ спасти этот пример?

17
задан Alan Moore 25 February 2010 в 00:56
поделиться

3 ответа

Отредактировано на 2016-02-02

Начиная с iOS 6 Был представлен класс SSHtureProductViewController . Вы можете связать приложение, не оставляя фрагмент кода приложения в Swift 3 .x/2.x и Objective-C имеет значение здесь .

Объект SKStureProductViewController представляет хранилище, позволяющее для приобретения других носителей в App Store. Например, ваше приложение может отображать магазин, чтобы позволить пользователю приобрести другое приложение.


Из Новости и объявления для разработчиков Apple .

Подключение клиентов непосредственно к вашему приложению в магазине приложений со ссылками на iTunes С помощью iTunes ссылки вы можете предоставить клиенты с простым способом доступа ваши приложения непосредственно в App Store с вашего веб-сайта или маркетинга кампании. Создание ссылки iTunes простой и может быть сделан для направления клиенты для одного приложения, все ваших приложений или к определенному приложению с указано название вашей компании.

Отправка клиентам определенного приложение: http://itunes.com/apps/appname

Для отправки клиенты в список ваших приложений в магазине приложений: http://itunes.com/apps/developername

Отправка клиентов в определенное приложение с названием вашей компании, включенным в URL-АДРЕС: http://itunes.com/apps/developername/appname


Дополнительные примечания:

Вы можете заменить http :// на itms :// или itms-apps ://, чтобы избежать перенаправления.

Обратите внимание , что itms :// отправит пользователя в iTunes store и itms-apps :// с отправкой их в App Store!

Сведения об именовании см. в разделе Apple QA1633:

https://developer.apple.com/library/content/qa/qa1633/_index.html .

Изменить (по состоянию на январь 2015 года):

itunes.com/apps ссылки следует обновить до appstore.com/apps. См. QA1633 выше, которая была обновлена. Новый QA1629 предлагает следующие шаги и код для запуска магазина из приложения:

  1. Запуск iTunes на компьютере.
  2. Найдите предмет, на который требуется создать ссылку.
  3. Щелкните правой кнопкой мыши или, удерживая нажатой клавишу «Control», имя предмета в iTunes, затем выберите «Копировать URL-адрес iTunes Store» во всплывающем меню.
  4. Создайте в приложении объект NSURL с скопированным URL-адресом iTunes, затем передайте этот объект методу UIApplication openURL : для открытия предмета в App Store.

Пример кода:

NSString *iTunesLink = @"itms://itunes.apple.com/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

Swift 4,2

   let urlStr = "itms-apps://itunes.apple.com/app/apple-store/id375380948?mt=8"
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)

    } else {
        UIApplication.shared.openURL(URL(string: urlStr)!)
    }
-121--177707-

Я не думаю, что это возможно без какой-либо формы обзора переменной ширины. Добавление утверждения \K в 5,10 обеспечивает способ подделки положительного взгляда переменной ширины. То, что нам действительно нужно, это переменная ширина отрицательный взгляд позади, но с небольшой креативности и много уродства мы можем сделать его работать:

use 5.010;
$_ = '$1234567890.123456789';
s/(?<!\.)(?:\b|\G)\d+?\K(?=(?:\d\d\d)+\b)/,/g;
say;  # $1,234,567,890.123456789

Если когда-либо был образец, который умолял о /x нотации это один:

s/
  (?<!\.)        # Negative look-behind assertion; we don't want to match
                 # digits that come after the decimal point.

  (?:            # Begin a non-capturing group; the contents anchor the \d
                 # which follows so that the assertion above is applied at
                 # the correct position.

    \b           # Either a word boundary (the beginning of the number)...

    |            # or (because \b won't match at subsequent positions where
                 # a comma should go)...

    \G           # the position where the previous match left off.

  )              # End anchor grouping

  \d+?           # One or more digits, non-greedily so the match proceeds
                 # from left to right. A greedy match would proceed from
                 # right to left, the \G above wouldn't work, and only the
                 # rightmost comma would get placed.

  \K             # Keep the preceding stuff; used to fake variable-width
                 # look-behind

                 # <- This is what we match! (i.e. a position, no text)

  (?=            # Begin a positive look-ahead assertion

    (?:\d\d\d)+  # A multiple of three digits (3, 6, 9, etc.)

    \b           # A word (digit) boundary to anchor the triples at the
                 # end of the number.

  )              # End positive look-ahead assertion.
/,/xg;
14
ответ дан 30 November 2019 в 14:00
поделиться

Если вы должны опубликовать сообщение в Stack Overflow с вопросом, может ли кто-нибудь выяснить, как это сделать с отрицательным просмотром назад, тогда очевидно, что это не лучший пример негативного просмотра назад. Лучше придумать новый пример, чем пытаться спасти этот.

В этом духе, как насчет автоматического корректора орфографии?

s/(?<![Cc])ei/ie/g; # Put I before E except after C

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

{{1} }
4
ответ дан 30 November 2019 в 14:00
поделиться

Я не думаю, что это то, что вам нужно (особенно потому, что отрицательное утверждение look-behind было отменено), но я полагаю, что ваш единственный вариант - это сбрасывать десятичные знаки, как в этом примере:

s/
  (?:
    (?<=\d)
    (?=(?:\d\d\d)+\b)
   |
    ( \d{0,3} \. \d+ )
  )
 / $1 ? $1 : ',' /exg;

P.S. Я думаю, что это хороший пример, когда он не используется как первый в книге, поскольку он демонстрирует некоторые подводные камни и ограничения утверждений look-around.

0
ответ дан 30 November 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: