<\s*(\w+)[^/>]*>
Объясненные детали:
<
: начальный символ
\s*
: он может иметь пробелы перед именем тега (уродливым, но возможным).
(\w+)
: теги могут содержать буквы и цифры (h1). Ну,\w
также соответствует «_», но это не мешает, я думаю. Если любопытное использование ([a-zA-Z0-9] +).
[^/>]*
: все, кроме>
и/
, до закрытия>
>
: закрытие>
UNRELATED
И для парней, которые недооценивают регулярные выражения, говоря, что они только настолько сильны, как обычные языки:
anbanban, который не является регулярный и даже контекстно-свободный, можно сопоставить с
^(a+)b\1b\1$
Обратное обращение FTW !
Да, ваш конкретный пример прекрасен, так как оба 0
и 1
могут быть точно представлены как float
.
Обратите внимание, что это не так в целом: есть много больших int
значения, которые не могут быть представлены точно как float
. Например, следующее выдает true
( Ideone ), хотя 2_000_000_001 не равно 2_000_000_000:
import java.util.*;
import java.lang.*;
import java.io.*;
class FloatTest {
private static boolean isTwoBillion(float f) {
return f == 2_000_000_000;
}
public static void main (String[] args) {
System.out.println(isTwoBillion(2_000_000_001));
}
}
Обратите внимание, что в отличие от float
, double
имеет достаточно большой мантиссы для хранения каждого 32-битного значения int
.
Однако есть long
значения, которые не могут быть представлены как double
s. Это начинается с значения long
9_223_372_036_854_764
, который равен Long.MAX_VALUE/1000 - 10
. Номер один больше (...765
) не имеет аналога double
, тогда как следующий номер (...766
). Иными словами, начиная с ...764
в качестве double
, приращение последнего бит мантиссы дает ...766
при преобразовании обратно в long
.
long
vsdouble
. – Jim Garrison 9 January 2018 в 00:18