Попробуйте следующее:
p <- c("Hello", "H*llo")
grepl("\\*", p)
[1] FALSE TRUE
Это работает, потому что звездочка *
имеет особое значение в регулярном выражении. В частности, *
означает найти нуль или более предыдущего элемента.
Таким образом, вам нужно избежать звездочки, используя \\*
. Двойной побег необходим, потому что \
уже имеет значение escape в R.
Точно так же, как &
и &&
оператор, двойной Оператор является оператором "короткого замыкания".
, Например:
if(condition1 || condition2 || condition3)
, Если condition1 верен, условие 2 и 3 НЕ будет проверено.
if(condition1 | condition2 | condition3)
Это проверит условия 2 и 3, даже если 1 будет уже верно. Поскольку Ваши условия могут быть довольно дорогими функциями, можно получить хорошее повышение производительности при помощи их.
существует один большой протест, NullReferences или подобные проблемы. Например:
if(class != null && class.someVar < 20)
, Если класс является пустым, оператор "if" остановится, после class != null
ложь. Если Вы только используете & это попытается проверить class.someVar
, и Вы получаете хорошее NullReferenceException
. С Или-оператором, который не может быть так большой частью прерывания, поскольку маловероятно, что Вы инициировали что-то плохо, но это - что-то для учета.
Никто никогда не использует сингл &
или |
операторы, хотя, если у Вас нет дизайна, где каждое условие является функцией, которая должна быть выполнена. Походит на запах дизайна, но иногда (редко) это - очевидный способ, чтобы сделать материал. &
оператор действительно "выполняет эти 3 функции, и если один из них возвращает false, еще выполнитесь блок", в то время как эти |
еще действительно "только работает блок, если ни один не возвращает false" - может быть полезным, но, как сказано, часто это - запах дизайна.
существует Второе использование |
и &
оператор хотя: Битовые операции .
|| логическая операция ИЛИ. Это кажется, что Вы в основном знаете, каково это. Это используется в условных операторах такой, как будто, в то время как, и т.д.
condition1 || condition2
Оценивает к истинному, если или condition1 ИЛИ condition2 верны.
| оператор битового "ИЛИ". Это используется для работы на два числа. Вы смотрите на каждый бит каждого числа индивидуально и, если один из битов будет 1 в по крайней мере одном из чисел, то получающийся бит будет 1 также. Вот несколько примеров:
A = 01010101
B = 10101010
A | B = 11111111
A = 00000001
B = 00010000
A | B = 00010001
A = 10001011
B = 00101100
A | B = 10101111
, Надо надеяться, который имеет смысл.
Так для ответа на последние два вопроса я не сказал бы, что, кроме того, существуют любые протесты, "знают различие между этими двумя операторами". Они не являются взаимозаменяемыми, потому что они делают две совершенно других вещи.
Каждый "поразрядный или".
10011b | 01000b => 11011b
другой логика или.
TRUE или FALSE => верный
Хороший вопрос. Эти два оператора работают то же в PHP и C#.
|
битовое "ИЛИ". Это сравнит два значения их битами. Например, 1101 | 0010 = 1111. Это чрезвычайно полезно при использовании разрядных опций. Например, Чтение = 01 (0X01) Запись = 10 (0X02) Чтений-записей = 11 (0X03). Один полезный пример открыл бы файлы. Простой пример был бы:
File.Open(FileAccess.Read | FileAccess.Write); //Gives read/write access to the file
||
логическое ИЛИ. Это - способ, которым думает большинство людей ИЛИ и сравнивает два значения на основе их истины. Например, Я иду в хранилище, или я перейду к торговому центру. Это - то, используемое чаще всего в коде. Например:
if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer
Ресурс PHP: http://us3.php.net/language.operators.bitwise
Ресурсы C#: http://msdn.microsoft.com/en-us/library/kxszd0kx (По сравнению с 71) .aspx
http://msdn.microsoft.com/en-us/library/6373h346 (По сравнению с 71) .aspx
Единственный канал, |, является одним из поразрядный операторы.
Из Википедии:
В семье языка программирования C, оператор битового "ИЛИ" "|" (канал). Снова, этот оператор не должен быть перепутан со своим булевым "логическим или" дубликатом, который рассматривает его операнды как булевы значения и записан "||" (два канала).
| оператор выполняет битовое "ИЛИ" своих двух операндов (значение, что обе стороны должны оценить ко лжи для него для возвращения false), в то время как || оператор только оценит второй оператор, если он должен будет.
http://msdn.microsoft.com/en-us/library/kxszd0kx (По сравнению с 71) .aspx
http://msdn.microsoft.com/en-us/library/6373h346 (По сравнению с 71) .aspx
Канал ожога "|" является "поразрядным" или и должен только использоваться, когда Вы знаете то, что Вы делаете. Двойной канал "||" является логическим или и может использоваться в логических операторах, как "x == 0 || x == 1".
Вот пример того, что поразрядное или делает: если a=0101 и b=0011, то a|b=0111. Если Вы будете иметь дело с логической системой, которая рассматривает любого ненулевого как верного, то поразрядное или будет действовать таким же образом как логическое или, но это - дубликат (поразрядно и, "&";) НЕ будет. Также поразрядное или не выполняет оценку короткого замыкания.
Единственный канал (|) оператор .
битового "ИЛИ", Два канала (||) являются логической операцией ИЛИ.
Они не являются взаимозаменяемыми.
|| (два канала) обычно логичны или в то время как | (один канал) двоичный файл или. Первое, что пришло на ум я не могу думать ни о каком времени, различием был бы большой глюк (кроме того, когда Вы присваиваете результат чему-то еще). Однако я уверенный у кого-то еще будет ситуация, где она имеет значение.
Редактирование: Ничего себе, шесть других ответов во время это взяло меня для записи этого.
Побитовое (|) vs . логический (||)! Думайте о логике как о Сравнимых объектах в Java, сравнивая некоторые различимые «части», в то время как побитовый оператор смотрит на эти объекты и вместо того, чтобы видеть, являются ли они визуально близнецами (как логический), делает образец ДНК и смотрит на 0 и 1 вместо этого.