Regex для всех печатных символов

Я пробовал так много решений с этой должности и в итоге получил решение ниже. Это полнофункциональное решение, если вам не нужно опускать тень на четкое цветовое представление.

- (void)addShadowWithRadius:(CGFloat)shadowRadius withOpacity:(CGFloat)shadowOpacity withOffset:(CGSize)shadowOffset withColor:(UIColor *)shadowColor withCornerradius:(CGFloat)cornerRadius
{
    UIView *viewShadow = [[UIView alloc]initWithFrame:self.frame];
    viewShadow.backgroundColor = [UIColor whiteColor];
    viewShadow.layer.shadowColor = shadowColor.CGColor;
    viewShadow.layer.shadowOffset = shadowOffset;
    viewShadow.layer.shadowRadius = shadowRadius;
    viewShadow.layer.shadowOpacity = shadowOpacity;
    viewShadow.layer.cornerRadius = cornerRadius;
    viewShadow.layer.masksToBounds = NO;
    [self.superview insertSubview:viewShadow belowSubview:self];

    [viewShadow setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.superview addConstraint:[NSLayoutConstraint constraintWithItem:viewShadow attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]];
    [self.superview addConstraint:[NSLayoutConstraint constraintWithItem:viewShadow attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0]];
    [self.superview addConstraint:[NSLayoutConstraint constraintWithItem:viewShadow attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:viewShadow attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]];
    [self.superview addConstraint:[NSLayoutConstraint constraintWithItem:viewShadow attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:viewShadow attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];
    [self layoutIfNeeded];

    self.layer.cornerRadius = cornerRadius;
    self.layer.masksToBounds = YES;
}
13
задан John Saunders 14 August 2009 в 05:16
поделиться

4 ответа

Существует обозначение класса символов POSIX [: print:] , которое должно соответствовать печатаемым символам, и [: cntrl:] для управляющих символов. Обратите внимание, что эти коды соответствия во всей таблице ASCII, поэтому они могут не подходить для сопоставления других кодировок.

В противном случае выражение [\ x00- \ x1f] будет соответствовать через управляющие символы ASCII, хотя, опять же, их можно было распечатать в других кодировках.

8
ответ дан 1 December 2019 в 17:55
поделиться

В Java , параметр \ p {Print} указывает класс печатаемых символов .

1
ответ дан 1 December 2019 в 17:55
поделиться

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

Если вы используете C, функция isprint (3) / макрос - ваш друг.

1
ответ дан 1 December 2019 в 17:55
поделиться

Если ваш вариант регулярного выражения поддерживает свойства Unicode , это, вероятно, лучший способ:

\P{Cc}

Соответствует любому символу это не управляющий символ, будь то ASCII - [\ x00- \ x1F \ x7F] - или Latin1 - [\ x80- \ x9F] (также известный как управляющие символы C1).

Проблема с классами POSIX, такими как [: print:] или \ p {Print} , заключается в том, что они могут сопоставлять разные вещи в зависимости от типа регулярного выражения и, возможно, от локали. настройки базовой платформы. В Java они строго ориентированы на ASCII. Это означает, что \ p {Print} соответствует только печатным символам ASCII - [\ x20- \ x7E] - тогда как \ P {Cntrl} (примечание заглавная 'P') соответствует всему, что не управляющий символ ASCII - [^ \ x00- \ x1F \ x7F] . То есть он соответствует любому символу ASCII, не являющемуся управляющим, или любому символу, отличному от ASCII, включая управляющие символы C1.

16
ответ дан 1 December 2019 в 17:55
поделиться
Другие вопросы по тегам:

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