Теперь люди любят бесконечно препираться о том, является ли «пройти по ссылке» правильным способом описать, что такое Java et al. действительно делаю. Дело в том, что:
- Передача объекта не копирует объект.
- Объект, переданный функции, может иметь свои члены, модифицированные функцией.
- Первичное значение, переданное функции, не может быть изменено функцией. Копия сделана.
В моей книге это называется передачей по ссылке.
- Брайан Би - Какие языки программирования проходят по ссылке?
Побег дефиса.
[a-zA-Z0-9!$* \t\r\n\-]
ОБНОВЛЕНИЕ: Не обращайте внимания на этот ответ - вы можете добавить дефис в группу, но вам не нужно его избегать. См. ответ Конрада Рудольфа вместо этого, который намного лучше отвечает и объясняет, почему.
Это то, что вам нужно?
MatchCollection matches = Regex.Matches(mystring, "-");
Дефис обычно является нормальным символом в регулярных выражениях.
Таким образом:
[-]
соответствует дефису. [abc-]
соответствует a
, b
, c
или дефис. [-abc]
соответствует a
, b
, c
или дефис. [ab-d]
соответствует a
, b
, c
или d
( только здесь дефис обозначает диапазон символов). [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 - + ()] + это регулярное выражение допускает дефис.
используйте «\ p {Pd}» без кавычек, чтобы соответствовать любому типу дефиса. Символ «-» - это всего лишь один тип дефиса, который также является особым символом в Regex.
. Сложнее всего использовать экранированный дефис, чтобы он не зависел от положения. Это \-
внутри класса символов в квадратных скобках.
Но есть еще кое-что. Некоторые из перечисленных перечислений должны быть написаны по-разному. В некоторых случаях они определенно должны.
Это сравнение ароматов регулярных выражений говорит о том, что C♯ может использовать некоторые из простых свойств Unicode. Если вы имеете дело с Unicode, вы, вероятно, должны использовать общую категорию \p{L}
для всех возможных букв, а , возможно, \p{Nd}
для десятичных чисел. Кроме того, если вы хотите разместить всю эту пунктирную пунктирность, а не только HYPHEN-MINUS, вы должны использовать свойство \p{Pd}
. Вы также можете написать эту последовательность символов пробелов просто как \s
, считая, что это не слишком общее для вас.
Все вместе, это работает с апатерном [\p{L}\p{Nd}\p{Pd}!$*]
, чтобы соответствовать любому символу из что [. g5]
Я бы все равно использовал это, даже если бы я не планировал иметь дело с полным набором Unicode, потому что это хорошая привычка, и потому, что эти вещи часто растут за пределами их исходные параметры. Теперь, когда вы поднимаете его для использования в другом коде, он все равно будет работать правильно. Если вы жестко закодируете все символы, это не будет.