Вам просто нужно добавить захватывающие скобки, в дополнение к вашей скошенной скобке.
<?php
$in = "hello (world), my name (is andrew) and my number is (845) 235-0184";
preg_match_all('/\(([A-Za-z0-9 ]+?)\)/', $in, $out);
print_r($out[1]);
?>
Выводит:
Array ( [0] => world [1] => is andrew [2] => 845 )
Ну, можно использовать consts в атрибутах, так как они существуют как время компиляции. Вы не можете предсказать значение статической переменной только для чтения, так как эти .cctor
мог инициализировать его от конфигурации и т.д.
С точки зрения использования, константы врезаются в код вызова. Это означает, что, если Вы перекомпилировали библиотека dll для изменения общественность постоянный, но не изменяете потребителей, тогда он, потребители будут все еще использовать исходное значение. С переменной только для чтения этого не произойдет. Зеркальное отражение этого - то, что константы (очень, очень немного) более быстры, так как это просто загружает значение (вместо того, чтобы иметь необходимость разыменовать его).
интернирование Ре; хотя можно сделать это вручную, это - обычно функция компилятора/времени выполнения литералов; если Вы init поле только для чтения через литерал:
someField = "abc";
тогда эти "abc"
будет интернирован. При чтении его из конфигурации это не будет. Поскольку постоянная строка должна быть литералом, она будет также интернирована, но к ней получают доступ по-другому: снова, чтение из поля является разыменовыванием, а не ldstr
.
Что-то для замечания о константах, они на самом деле хранятся в исполняемом файле, таким образом объявляя, что многие из них будут увеличивать размер исполняемого файла.
Обычно, это не огромная проблема, а мой друг работал в компании, которая осуществила, "все должно быть константой" правило и управляемый для значительного увеличения их скомпилированного исполняемого размера.
Действительно, два типа не могут быть изменены после того, как они были инициализированы, но существуют некоторые различия между ними:
, Например, константа могла использоваться в этой ситуации:
public class MathValues
{
public const double PI = 3.14159;
}
И только для чтения было бы лучше для этого случая:
public class Person
{
public readonly DateTime birthDate;
public Person(DateTime birthDate)
{
this.birthDate = birthDate;
}
}
или
public class Person
{
public readonly DateTime birthDate = new DateTime(1986, 1, 24);
}
'константа' статична, таким образом, она совместно используется всеми экземплярами того класса и может быть получена доступ непосредственно (как MathValues. PI), тогда как 'только для чтения' не статично. Как следствие объявление как 'статическая константа' недопустимо, потому что константа является статическими, но 'помехами, только для чтения', законен
, 'константа' может содержать только целочисленный тип (sbyte, байт, короткий, ushort, интервал, uint, долго, ulong, символ, плавание, дважды, десятичное число, bool, или строка), перечисление или ссылка на пустой указатель (не классы или структуры, потому что они инициализируются во времени выполнения с 'новым' ключевым словом), тогда как 'только для чтения' может содержать составные типы, структуры или классы (при помощи нового ключевого слова при инициализации), но не может содержать перечисления
Используемый? Едва ли. Consts оценены во время компиляции, тогда как только для чтения оценены во времени выполнения. Можно также присвоить переменной только для чтения значение в конструкторе.
Поля только для чтения могут быть инициализированы или в объявление или в конструктор из класса. Поэтому поля только для чтения могут иметь различные значения в зависимости от конструктора, используемого .
А участник только для чтения может также быть используется для констант этапа выполнения как в следующем примере:
public static readonly uint currentTicks = (uint)DateTime.Now.Ticks;
поля Readonly не неявно статичны, и поэтому , статическая банка ключевого слова (должна) быть применена к полю только для чтения явно при необходимости. Это не позволяется для полей константы, которые неявно статичны.
участники Только для чтения могут держать сложные объекты при помощи новое ключевое слово при инициализации .
Вот различия между.NET C# константа , только для чтения и статичный только для чтения поля (от эта статья ).
Константы :
поля экземпляра Только для чтения :
Статические поля только для чтения :
Различие - то, что значение статического поля только для чтения установлено во время выполнения и может таким образом быть изменено содержанием класса, тогда как значение поля константы установлено к постоянному времени компиляции.
В статическом случае только для чтения содержанию класса позволяют изменить его только
в объявлении переменной (через переменный инициализатор) в статическом конструкторе (конструкторы экземпляра, если это не статично) статичный только для чтения обычно используется, если тип поля не позволяется в объявлении константы, или когда значение не известно во время компиляции.
Экземпляр поля только для чтения также позволяется.
Помните, что для ссылочных типов, в обоих случаях (статичный и экземпляр) модификатор только для чтения только препятствует тому, чтобы Вы присвоили новую ссылку на поле. Это конкретно не делает неизменным объект указанный ссылкой.
class Program
{
public static readonly Test test = new Test();
static void Main(string[] args)
{
test.Name = "Program";
test = new Test(); // Error: A static readonly field cannot be assigned to (except in a static constructor or a variable initializer)
}
}
class Test
{
public string Name;
}
Различие - то, что статичный только для чтения может быть изменен содержанием класса, но константа никогда не может изменяться и должна быть инициализирована к постоянному времени компиляции. Чтобы подробно остановиться на статическом случае только для чтения немного, содержание класса может только изменить его:
- в объявлении переменной (через переменный инициализатор).
- в статическом конструкторе (конструкторы экземпляра, если это не статично).
Ключевое слово константы в.NET C#
Пример: public const string abc = “xyz”;
Инициализированный только в объявлении. Значение оценено во время компиляции и не может быть изменено во время выполнения. Попытка изменить его вызовет ошибку компиляции. Константа уже довольно статична. Так как классы и структуры инициализируются во время выполнения с новым ключевым словом, Вы не можете установить константу на класс или структуру. Но, это должен быть один из целочисленных типов. Ключевое слово только для чтения в.NET C#
Пример: public readonly string abc;
Может быть инициализирован в коде объявления или коде consturctor. Значение оценено во время выполнения. Может быть объявлен как статичный или атрибут уровня экземпляра. Поле только для чтения может содержать сложный объект при помощи нового ключевого слова во время выполнения.
Еще одна вещь. Я не видел этого в комментариях выше, хотя, возможно, я пропустил это. Вы не можете создать постоянный массив.
private const int[] values = new int[] { 1, 2, 3 };
Но вы можете создать его, используя статическое поле только для чтения.
private static readonly int[] values = new int[] { 1, 2, 3 };
Так что если вам нужна константа массива, такая как список допустимых значений, и перечисление будет не подходит, тогда статический readonly - единственный путь. Например, если массив состоял из целых чисел, допускающих значение NULL, например:
private static readonly int?[] values = new int?[] { null, 1, 2, 3 };
Не можете сделать , что с константой, не так ли?