Как сопоставить один символ с несколькими условиями в регулярном выражении (регулярное выражение) в linux grep? [Дубликат]

Возможно, проблема в конфигурации почтового сервера, чтобы избежать подобных проблем или вам не нужно беспокоиться о проблеме с почтовым сервером, я рекомендую вам использовать PHPMailer , это плагин у которого есть все необходимое для отправки почты, единственное, что вы должны учесть, это иметь SMTP-порт (порт: 25 и 465), включен

require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';

$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
try {
       //Server settings
       $mail->SMTPDebug = 0;                                 
       $mail->isSMTP();                                      
       $mail->Host = 'smtp.gmail.com';  
       $mail->SMTPAuth = true;                               
       $mail->Username = 'correo@gmail.com';                 
       $mail->Password = 'contrasenia';                           
       $mail->SMTPSecure = 'ssl';                          
       $mail->Port = 465;                                    

       //Recipients
       $mail->setFrom('correo@gmail.com', 'my name');    
       $mail->addAddress('destination@correo.com');               

       //Attachments
       $mail->addAttachment('optional file');         // Add files, is optional

       //Content
       $mail->isHTML(true);// Set email format to HTML
       $mail->Subject = utf8_decode("subject");
       $mail->Body    = utf8_decode("mail content");
       $mail->AltBody = '';
       $mail->send();
     }
     catch (Exception $e){
        $error = $mail->ErrorInfo;
     }

2
задан OneXer 14 April 2016 в 09:46
поделиться

3 ответа

Ваша проблема заключается в пространствах любой стороны трубы.

Ни один из

" ^.*"
".*$ "

не будет соответствовать чему-либо, потому что ничего не появляется перед запуском или после завершения.

У этого есть шанс:

^[\u0000-\uFFFF]+$|^[^_%]
0
ответ дан Bohemian 22 August 2018 в 20:15
поделиться

Вот пример кода, чтобы исключить некоторые символы из диапазона с помощью Lookahead и Lookbehind Zero-Length Assertions , которые на самом деле не потребляют символы в строке, а только утверждают, возможно ли совпадение или нет.

Пример кода: (исключить m и n из диапазона a-z)

    String str = "abcdmnxyz";
    Pattern p=Pattern.compile("(?![mn])[a-z]");
    Matcher m=p.matcher(str);
    while(m.find()){
        System.out.println(m.group());
    }

вывод:

a b c d x y z

В так же, как вы можете это сделать.

Объяснение Regex (?![mn])[a-z]

  (?!                      look ahead to see if there is not:   
    [mn]                     any character of: 'm', 'n' 
  )                        end of look-ahead    
  [a-z]                    any character of: 'a' to 'z'

Вы можете разделить весь диапазон в поддиапазонах и решить эту проблему с помощью ([a-l]|[o-z]) или [a-lo-z].

1
ответ дан Braj 22 August 2018 в 20:15
поделиться
  • 1
    Существует лучший способ использования пересечения набора символов. – Wiktor Stribiżew 14 April 2016 в 09:49
  • 2
    Пожалуйста, вы можете добавить его в качестве ответа, чтобы я мог его изучить. Могут быть другие способы, как ([a-l]|[o-z]) – Braj 14 April 2016 в 09:50
  • 3
    @ WiktorStribiżew спасибо за то, что дал мне шанс узнать больше. – Braj 14 April 2016 в 10:05
  • 4
    – Wiktor Stribiżew 14 April 2016 в 10:07

Вы можете использовать пересечения / вычитания классов символов в Java regex, чтобы ограничить «общий» класс символов.

Класс символов [a-z&&[^aeiuo]] соответствует одной букве, которая не является гласным. Другими словами: он соответствует одному согласному.

Используйте

"^[\u0000-\uFFFF&&[^_%]]+$"

для соответствия всем символам Юникода, кроме _ и %.

Подробнее о пересечениях / вычитаниях класса символов, доступных в Java regex, см. Учебные пособия Java ™: классы символов .

Тестирование в OCPSoft Visual Regex Tester , показывающий, что нет совпадений, когда к строке добавляется %:

И демонстрация Java :

String input = "this";
Pattern p = Pattern.compile("[\u0000-\uFFFF&&[^_%]]+"); // No anchors because `matches()` is used
Matcher m = p.matcher(input);
boolean result = m.matches();
System.out.println(result); // => true
2
ответ дан Wiktor Stribiżew 22 August 2018 в 20:15
поделиться
Другие вопросы по тегам:

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