Для удаления я просто использовал это:
$str = preg_replace('~<MY_TAG(.*?)</MY_TAG>~Usi', "", $str);
Использование ~ вместо / для устранения разграниченных ошибок, вызванных обратным слэшем в конце тега, который, казалось, был проблемой даже с побегом. Устранение> из тега открытия допускает атрибуты или другие символы и по-прежнему получает тег и все его содержимое.
Это работает только там, где вложение не является проблемой.
Usi
означают U = Ungreedy, s = включить символы линии, i = регистр нечувствителен.
Нет. Но поскольку любой целочисленный тип, меньший чем int
, повышается до int
при передаче его в printf()
с переменными аргументами, вы можете использовать %d
:
bool x = true;
printf("%d\n", x); // prints 1
Но почему бы и нет
printf(x ? "true" : "false");
или лучше
printf("%s", x ? "true" : "false");
или даже лучше
fputs(x ? "true" : "false", stdout);
вместо?
Для bool нет спецификатора формата. Вы можете распечатать его, используя некоторые из существующих спецификаторов для печати целочисленных типов или сделать что-то более причудливое:
printf("%s", x?"true":"false");
В традиции itoa()
:
#define btoa(x) ((x)?"true":"false")
bool x = true;
printf("%s\n", btoa(x));
Я предпочитаю ответ из Лучший способ напечатать результат bool как «false» или «true» в c? , так же как
printf("%s\n", "false\0true"+6*x);
Чтобы просто напечатать 1 или 0 на основе логического значения, которое я только что использовал:
printf("%d\n", !!(42));
Особенно полезно с флагами:
#define MY_FLAG (1 << 4)
int flags = MY_FLAG;
printf("%d\n", !!(flags & MY_FLAG));
Если вам нравится C ++ лучше, чем C, вы можете попробовать это:
#include <ios>
#include <iostream>
bool b = IsSomethingTrue();
std::cout << std::boolalpha << b;