Objective C - RegEx - Недопустимый диапазон при попытке сопоставить пробелы [дублировать]

JavaScript передает примитивные типы по значениям и типам объектов по ссылке

Теперь люди любят бесконечно препираться о том, является ли «пройти по ссылке» правильным способом описать, что такое Java et al. действительно делаю. Дело в том, что:

  1. Передача объекта не копирует объект.
  2. Объект, переданный функции, может иметь свои члены, модифицированные функцией.
  3. Первичное значение, переданное функции, не может быть изменено функцией. Копия сделана.

В моей книге это называется передачей по ссылке.

- Брайан Би - Какие языки программирования проходят по ссылке?

49
задан Thomas Anderson 1 November 2010 в 13:02
поделиться

6 ответов

Побег дефиса.

[a-zA-Z0-9!$* \t\r\n\-]

ОБНОВЛЕНИЕ: Не обращайте внимания на этот ответ - вы можете добавить дефис в группу, но вам не нужно его избегать. См. ответ Конрада Рудольфа вместо этого, который намного лучше отвечает и объясняет, почему.

51
ответ дан Community 22 August 2018 в 09:24
поделиться
  • 1
    Полностью нет необходимости. – Konrad Rudolph 1 November 2010 в 13:09
  • 2
    Это так? Это потому, что это в группе персонажей? Виноват. – Neil Barnwell 1 November 2010 в 13:11
  • 3
    @KonradRudolph. Вы правы, но я не уверен, что невыпущенная версия легче понять. Два возможных способа использования тире сбивают с толку, поэтому перед этим есть вопросы об этом. Это, безусловно, более элегантно, как только вы об этом знаете, но для новичков это немного запутанно. – Christophe Roussy 15 July 2014 в 14:02

Это то, что вам нужно?

MatchCollection matches = Regex.Matches(mystring, "-");
2
ответ дан Aliostad 22 August 2018 в 09:24
поделиться

Дефис обычно является нормальным символом в регулярных выражениях.

Таким образом:

  • [-] соответствует дефису.
  • [abc-] соответствует a, b, c или дефис.
  • [-abc] соответствует a, b, c или дефис.
  • [ab-d] соответствует a, b, c или d ( только здесь дефис обозначает диапазон символов).
128
ответ дан Konrad Rudolph 22 August 2018 в 09:24
поделиться
  • 1
    @rrr Вы хотите, чтобы он написал его для вас, а также изложил его? Все, что вам нужно сделать, это добавить дефис в группу. – Neil Barnwell 1 November 2010 в 13:29
  • 2
    @rrrr: Я верю, что дал ответ. Вопрос заключался в том, «как писать« X »...», и я считаю, что объяснил, как это сделать. Принимая мой ответ и применяя объяснение к фактическому выражению под рукой, не должно требоваться больше навыков познания, чем требуется первокласснику. Фактически, это точно , чему учатся первоклассники, когда они учат базовой арифметике. Не стесняйтесь исправить мое предположение. – Konrad Rudolph 1 November 2010 в 13:30
  • 3
  • 4
    @MarkP Ну, duh: шестнадцатеричные коды символов преобразуются с помощью анализатора интерфейса (из C # или JavaScript или любого другого языка, который вы используете) в фактический символ. Таким образом, использование шестнадцатеричных кодов совпадает с использованием фактических символов в отношении значения строки. – Konrad Rudolph 21 November 2015 в 19:21
  • 5
    @Pshemo Конечно, глупая ошибка. Что касается интерпретации в [a-c-e]: это просто неверно в некоторых спецификациях / механизмах регулярных выражений. Репозит POSIX, например, запрещает его. – Konrad Rudolph 2 November 2016 в 18:32

[- a-z0-9] +, [a-z0-9 -] +, [az-0-9] +, а также [az-0-9] + все одинаковы. Дефис между двумя диапазонами рассматриваемый как символ. А также [a-z0-9 - + ()] + это регулярное выражение допускает дефис.

1
ответ дан Parimala 22 August 2018 в 09:24
поделиться
  • 1
    Должен быть один из лучших ответов. – Razor's Edge 24 May 2018 в 07:15

используйте «\ p {Pd}» без кавычек, чтобы соответствовать любому типу дефиса. Символ «-» - это всего лишь один тип дефиса, который также является особым символом в Regex.

0
ответ дан Radu Simionescu 22 August 2018 в 09:24
поделиться

. Сложнее всего использовать экранированный дефис, чтобы он не зависел от положения. Это \- внутри класса символов в квадратных скобках.

Но есть еще кое-что. Некоторые из перечисленных перечислений должны быть написаны по-разному. В некоторых случаях они определенно должны.

Это сравнение ароматов регулярных выражений говорит о том, что C♯ может использовать некоторые из простых свойств Unicode. Если вы имеете дело с Unicode, вы, вероятно, должны использовать общую категорию \p{L} для всех возможных букв, а , возможно, \p{Nd} для десятичных чисел. Кроме того, если вы хотите разместить всю эту пунктирную пунктирность, а не только HYPHEN-MINUS, вы должны использовать свойство \p{Pd}. Вы также можете написать эту последовательность символов пробелов просто как \s, считая, что это не слишком общее для вас.

Все вместе, это работает с апатерном [\p{L}\p{Nd}\p{Pd}!$*], чтобы соответствовать любому символу из что [. g5]

Я бы все равно использовал это, даже если бы я не планировал иметь дело с полным набором Unicode, потому что это хорошая привычка, и потому, что эти вещи часто растут за пределами их исходные параметры. Теперь, когда вы поднимаете его для использования в другом коде, он все равно будет работать правильно. Если вы жестко закодируете все символы, это не будет.

10
ответ дан tchrist 22 August 2018 в 09:24
поделиться
  • 1
    Я склонен согласиться с этим ответом, тем меньше вам нужно знать, насколько безопаснее код. Это напоминает мне проблемы с приоритетами оператора: stackoverflow.com/questions/10007140/… , я получаю скобки в них (автоматически добавляется моей IDE), не нужно знать их всех. Вы или кто-то еще может испортить рано или поздно. Конечно, если вы много работаете с регулярным выражением в своих проектах, вам может потребоваться более продвинутое знание. – Christophe Roussy 15 July 2014 в 13:54
Другие вопросы по тегам:

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