Regex, который никогда не будет подбираться ничем

В зависимости от того, сколько точных результатов Вам нужно, можно просто повредить изображения в n x n пиксельные блоки и проанализировать их. Если Вы получаете различные результаты в первом блоке, Вы не можете прекратить обрабатывать, приведя к некоторым повышениям производительности.

Для анализа квадратов можно, например, получить сумму значений цвета.

120
задан 4 revs, 2 users 100% 3 May 2012 в 05:51
поделиться

19 ответов

На самом деле это довольно просто, хотя это зависит от реализации / flags *:

$a

Соответствует символу a после конца строка. Удачи.

ПРЕДУПРЕЖДЕНИЕ:
Это выражение дорогое - оно просканирует всю строку, найдет привязку конца строки и только тогда не найдет a и вернет отрицательное значение. соответствие. (Подробнее см. Комментарий ниже.)


* Первоначально я не особо задумывался о регулярном выражении в многострочном режиме, где $ также соответствует концу строки. По факту,

62
ответ дан 24 November 2019 в 01:36
поделиться

Как насчет $ ^ или, может быть, (?!) ?

8
ответ дан 24 November 2019 в 01:36
поделиться

Кажется, это работает:

$.
8
ответ дан 24 November 2019 в 01:36
поделиться

a \ bc , где \ b - это выражение нулевой ширины, которое соответствует границе слова.

Оно не может появляться в середине слово, к которому мы его заставляем.

29
ответ дан 24 November 2019 в 01:36
поделиться
'[^0-9a-zA-Z...]*'

и замените ... всеми печатными символами;). Это текстовый файл.

0
ответ дан 24 November 2019 в 01:36
поделиться

осмотритесь:

(? = a) b

Для новичков в регулярных выражениях: положительный взгляд вперед (? = a) гарантирует, что следующим символом будет a , но не меняет место поиска (или не включает "а" в совпавшую строку). Теперь, когда подтверждено, что следующим символом является a , оставшаяся часть регулярного выражения ( b ) соответствует только в том случае, если следующим символом является b . Таким образом, это регулярное выражение соответствует только в том случае, если символ одновременно является a и b .

34
ответ дан 24 November 2019 в 01:36
поделиться

Максимальное соответствие

a++a

По крайней мере, один a , за которым следует любое количество a х, без возврата. Затем попробуйте сопоставить еще одно a .

или Независимое подвыражение

Это эквивалентно помещению a + в независимое подвыражение, за которым следует другое a .

(?>a+)a
11
ответ дан 24 November 2019 в 01:36
поделиться

А что насчет вместо регулярного выражения просто использовать оператор if "всегда ложно"? В javascript:

var willAlwaysFalse=false;
if(willAlwaysFalse)
{
}
else
{
}
0
ответ дан 24 November 2019 в 01:36
поделиться

Может быть, это?

/$.+^/
1
ответ дан 24 November 2019 в 01:36
поделиться

Python не примет его, но Perl будет:

perl -ne 'print if /(w\1w)/'

Это регулярное выражение должно (теоретически) попытаться сопоставить бесконечное (четное) число w s, потому что первая группа ( () s) рекурсивно повторяется сама в себя. Кажется, что Perl не выдает никаких предупреждений, даже в use strict; используйте предупреждения; , поэтому я предполагаю, что это '

4
ответ дан 24 November 2019 в 01:36
поделиться

Perl 5.10 поддерживает специальные контрольные слова, называемые «глаголами», которые заключены в ] (* ...) последовательность. (Сравните со специальной последовательностью (? ...) .) Среди них она включает (* FAIL) глагол , который немедленно возвращается из регулярного выражения.

Примечание. Вскоре после этого глаголы также реализованы в PCRE, поэтому вы можете использовать их в PHP или других языках, используя библиотеку PCRE. (Однако вы не можете использовать Python или Ruby. Они используют свой собственный движок.

10
ответ дан 24 November 2019 в 01:36
поделиться

Используйте отрицательный прогноз :

>>> import re
>>> x=r'(?!x)x'
>>> r=re.compile(x)
>>> r.match('')
>>> r.match('x')
>>> r.match('y')

этот RE является противоречивым в терминах и поэтому никогда не будет соответствовать чему-либо.

ПРИМЕЧАНИЕ:
В Python, ] re.match () неявно добавляет якорь начала строки ( \ A ) в начало регулярного выражения. Этот якорь важен для производительности: без него будет сканироваться вся строка. Те, кто не использует Python, захотят добавить привязку явно:

\A(?!x)x
74
ответ дан 24 November 2019 в 01:36
поделиться

$.

. ^

$. ^

(?!)

20
ответ дан 24 November 2019 в 01:36
поделиться

Самым быстрым будет:

r = re.compile(r'a^')
r.match('whatever')

'a' может быть любым неспециальным символом ('x', 'y'). Реализация Knio может быть немного более чистой, но эта будет быстрее для всех строк, не начинающихся с любого символа, который вы выберете вместо «а», потому что в этих случаях он не будет соответствовать после первого символа, а не после второго.

5
ответ дан 24 November 2019 в 01:36
поделиться

Я считаю, что

\Z RE FAILS! \A

охватывает даже те случаи, когда регулярное выражение включает такие флаги, как MULTILINE, DOTALL и т. Д.

>>> import re
>>> x=re.compile(r"\Z RE FAILS! \A")
>>> x.match('')
>>> x.match(' RE FAILS! ')
>>>

Я считаю (но не тестировал его), что независимо от длины (> 0) строки между \ Z и \ A , время до отказа должно быть постоянным.

2
ответ дан 24 November 2019 в 01:36
поделиться

[^ \ d \ D] или (? = A) b или a $ a или a ^ a

4
ответ дан 24 November 2019 в 01:36
поделиться

Переносимое решение, которое не будет зависеть от реализации регулярного выражения, состоит в том, чтобы просто использовать постоянную строку , которая, как вы уверены, будет никогда не появляются в журналах сообщений. Например, сделайте строку на основе следующего:

cat /dev/urandom | hexdump | head -20
0000000 5d5d 3607 40d8 d7ab ce72 aae1 4eb3 ae47
0000010 c5e2 b9e8 910d a2d9 2eb3 fdff 6301 c85f
0000020 35d4 c282 e439 33d8 1c73 ca78 1e4d a569
0000030 8aca eb3c cbe4 aff7 d079 ca38 8831 15a5
0000040 818b 323f 0b02 caec f17f 387b 3995 88da
0000050 7b02 c80b 2d42 8087 9758 f56f b71f 0053
0000060 1501 35c9 0965 2c6e 03fe 7c6d f0ca e547
0000070 aba0 d5b6 c1d9 9bb2 fcd1 5ec7 ee9d 9963
0000080 6f0a 2c91 39c2 3587 c060 faa7 4ea4 1efd
0000090 6738 1a4c 3037 ed28 f62f 20fa 3d57 3cc0
00000a0 34f0 4bc2 3067 a1f7 9a87 086b 2876 1072
00000b0 d9e1 6b8f 5432 a60e f0f5 00b5 d9ef ed6f
00000c0 4a85 70ee 5ec4 a378 7786 927f f126 2ec2
00000d0 18c5 46fe b167 1ae6 c87c 1497 48c9 3c09
00000e0 8d09 e945 13ce 7da2 08af 1a96 c24c c022
00000f0 b051 98b3 2bf5 4d7d 5ec4 e016 a50d 355b
0000100 0e89 d9dd b153 9f0e 9a42 a51f 2d46 2435
0000110 ef35 17c2 d2aa 3cc7 e2c3 e711 d229 f108
0000120 324e 5d6a 650a d151 bc55 963f 41d3 66ee
0000130 1d8c 1fb1 1137 29b2 abf7 3af7 51fe 3cf4

Конечно, это не интеллектуальная задача, но больше похоже на программирование изоленты .

-2
ответ дан 24 November 2019 в 01:36
поделиться
new Regex(Guid.NewGuid().ToString())

Создает шаблон, содержащий только алфавитно-цифровые символы и '-' (ни один из которых не является специальным символом regex), но статистически невозможно, чтобы эта строка встречалась где-либо ранее (потому что в этом весь смысл GUID)

.
-6
ответ дан 24 November 2019 в 01:36
поделиться

Первый неконтролируемый литер может быть исключен путем определения неродового класса, который расширяет универсальную Map < Последовательность, Pair < Последовательность, Boolean > > и сохранения этого класса в SharedContext вместо родовой TreeMap , например (используя ForwardingMap из Гуава

class InputFieldMap extends ForwardingMap<String,Pair<String,Boolean>> {

    private final Map<String,Pair<String,Boolean>> delegate =
        Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER);
    protected Map<String,Pair<String,Boolean>> delegate() { return delegate; }

}

// ...

context.set("Input Fields"  ,Collections.synchronizedMap(new InputFieldMap()));

// ...

inputFields     =(InputFieldMap)context.get("Input Fields"  ,null);
outputFields    =(Map<?,?>     )context.get("Output Fields" ,null);

Вы могли бы сделать вторую форму безопасной таким же образом, или (если вы только читаете карту, но не изменяете ее) использовать карту как есть (с подстановочными параметрами) и преобразовать значение в последовательность с каждым поиском:

String bar = String.valueOf(outputFields.get("foo"));

или обернуть карту:

Map<?, String> wrappedOutputFields    =
    Maps.transformValues(outputFields, Functions.toStringFunction());

// ...

String bar = wrappedOutputFields.get("foo");
-121--3713186-

Отличный поймать моего друга. Я работаю с парой разработчиков в моем веб-проекте и у меня была та же проблема. Я не мог понять, почему он работает в Firefox, а не в IE (все версии). Сделал то, что ты сказал, и проверил файл, и убедился, что он не полный. Один из других разработчиков должен быть скопирован из старого кода. В любом случае, мы не используем xhtml strict мы используем xhtml переходный, и это все равно позволит colorbox работать правильно в IE (все версии) и Firefox. Ниже приведен код, который я использовал для работы с colorbox:

< html xmlns = «http://www.w3.org/1999/xhtml» >

Спасибо Мариано за помощь в этом. Спас много часов разочарования!

Тоби Гутьеррес

-121--4154749-

Пропущенный:

^\b$

Он не может совпадать, поскольку пустая последовательность не содержит границы слова. Тестируется в Python 2.5.

35
ответ дан 24 November 2019 в 01:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: