Как включить косую черту и точки в PHP preg_match_all? [Дубликат]

Это выражение вызывается с немедленным вызовом в Javascript:

Чтобы понять IIFE в JS, давайте сломаем его:

  1. Выражение: что-то, возвращающее значение Пример: Попробуйте следовать в хром-консоли.
  2. Функция Expression: Пример:
// Function Expression 
var greet = function(name){
   return 'Namaste' + ' ' + name;
}

greet('Santosh');
< / blockquote>

Как работает выражение функции: - Когда JS-движок запускается в первый раз (Execution Context - Create Phase), эта функция (с правой стороны = выше) не запускается или не сохраняется в памяти. Переменной «greet» присваивается значение «undefined» двигателем JS. - Во время выполнения (Execution Context - Execute phase) объект funtion создается «на лету» (еще не выполнен), получает назначение переменной «greet» и может быть вызван с помощью «greet (« somename »)».

3. Сразу вызывается выражение Funtion:

Пример:

// IIFE
var greeting = function(name) {
    return 'Namaste' + ' ' + name;
}('Santosh')

console.log(greeting)  // Namaste Santosh. 

Как работает IIFE: - Обратите внимание на «()» сразу после объявления функции. Каждый объект funtion имеет прикрепленное к нему свойство «CODE», которое может быть вызвано. И мы можем вызвать его (или вызвать) с помощью скобок (). - Таким образом, здесь, во время выполнения (Контекст выполнения - Выполнение фазы), объект функции создается и выполняется одновременно. Так что теперь вместо переменной funtion вместо переменной funtion есть возвращаемое значение (строка)

Типичная Usecase IIFE в JS:

В качестве примера используется обычная схема IIFE.

// IIFE 
// Spelling of Function was not correct , result into error
(function (name) {
   var greeting = 'Namaste';
   console.log(greeting + ' ' + name);
})('Santosh');
  • мы здесь делаем две вещи. a) Обертывание выражения функции внутри фигурных скобок (). Это означает, что синтаксический синтаксический анализатор все, что помещается внутри (), является выражением (выражение функции в этом случае) и является допустимым кодом. б) Мы вызываем эту функцию в то же время, используя () в конце ее.

Таким образом, эта функция создается и выполняется одновременно (IIFE).

Важная утилита для IIFE:

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

Предположим, что у меня есть еще один JS-файл (test1.js), используемый в моем приложении вместе с iife.js (см. ниже).

// test1.js

var greeting = 'Hello';

// iife.js
// Spelling of Function was not correct , result into error
(function (name) { 
   var greeting = 'Namaste';
   console.log(greeting + ' ' + name);
})('Santosh');

console.log(greeting)   // No collision happens here. It prints 'Hello'.

Итак, IIFE помогает нам писать безопасный код, где мы не сталкиваемся с глобальными объектами непреднамеренно.

16
задан Johannes 9 January 2010 в 20:47
поделиться

4 ответа

Ваше регулярное выражение почти работает, вы просто забыли избежать периода. Кроме того, в PHP вам нужны разделители:

'/@(.*?)\./s'

s - модификатор DOTALL .

Вот полный пример того, как вы можете использовать его в PHP:

$s = 'foo@bar.baz';
$matches = array();
$t = preg_match('/@(.*?)\./s', $s, $matches);
print_r($matches[1]);

Выход:

bar
31
ответ дан Mark Byers 22 August 2018 в 15:00
поделиться
  • 1
    Извините, я не заметил, что он использовал многострочные строки. Обновленный ответ. – Mark Byers 9 January 2010 в 20:53
  • 2
    andreas не сказал, что он работал со струнами с разрывами строк, я только что упомянул, что если бы это было так, предлагаемое решение не сработало. И теперь это происходит, конечно. – Bart Kiers 9 January 2010 в 20:56
  • 3
    Ах, да, я вижу сейчас. Мне интересно, пытается ли он разобрать электронные письма ... хотя это и есть догадка. – Mark Byers 9 January 2010 в 21:09
  • 4
    Я пытаюсь получить домен электронной почты. @Mark Byers, ваш пример стреляет в меня с «Неизвестный модификатор @». Добавляя \ before @, получаем пустую страницу. Черт, ненавижу регулярное выражение :-) – Johannes 9 January 2010 в 21:33
  • 5
    Также @ является допустимым символом в первой части адреса, если он экранирован или кавычками, например. "firstname @ lastname & quot; @ example.com - см. apps.ietf.org/rfc/rfc3696.html стр. 6. Вам следует рассмотреть возможность использования совместимого с стандартами анализатора электронной почты, а не пытаться перевернуть его. – Mark Byers 9 January 2010 в 21:51

Если вы изучаете регулярное выражение, вы можете также проанализировать их:

@\K[^.]++(?=\.)

(?<=@)[^.]++(?=\.)

Оба этих регулярных выражения используют притяжательные кванторы (++). Используйте их, когда можете, чтобы избежать ненужного возврата. Кроме того, используя поисковые конструкции (или \K), мы можем сопоставить часть между @ и . в $matches[0].

2
ответ дан Geert 22 August 2018 в 15:00
поделиться

Попробуйте это регулярное выражение:

@([^.]*)\.

Выражение [^.]* будет соответствовать любому числу любого символа, кроме точки. И простая точка должна быть экранирована, поскольку это особый символ.

11
ответ дан Gumbo 22 August 2018 в 15:00
поделиться

это лучший и быстрый в использовании

function get_string_between ($str,$from,$to) {

    $string = substr($str, strpos($str, $from) + strlen($from));

    if (strstr ($string,$to,TRUE) != FALSE) {

        $string = strstr ($string,$to,TRUE);

    }

    return $string;

}
2
ответ дан Yada 22 August 2018 в 15:00
поделиться
Другие вопросы по тегам:

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