Регулярное выражение, которое содержится по крайней мере по одному

// If you just want to see the year difference then use this function.
// Using the logic I've created you may also create month and day difference
// which I did not provide here so you may have the efforts to use your brain.
// :)
$date1='2009-01-01';
$date2='2010-01-01';
echo getYearDifference ($date1,$date2);
function getYearDifference($date1=strtotime($date1),$date2=strtotime($date2)){
    $year = 0;
    while($date2 > $date1 = strtotime('+1 year', $date1)){
        ++$year;
    }
    return $year;
}
2
задан GFL 23 March 2019 в 17:15
поделиться

3 ответа

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

(?=\S*[a-z])(?=\S*\d)[a-z\d]+(?:[.-][a-z\d]+)+

Объяснение:

  • (?=\S*[a-z]) - Этот взгляд вперед гарантирует, что во входящем слове есть, по крайней мере, алфавитный символ
  • (?=\S*\d) - этот прогноз гарантирует, что во входящем слове есть хотя бы цифра
  • [a-z\d]+(?:[.-][a-z\d]+)+ - эта часть захватывает слово содержит буквенно-цифровое слово, содержащее хотя бы один специальный символ . или -

Online Demo

Вот PHP демонстрация кода, модифицирующая ваш код,

$input = '3370.01b, 6510.01.b, m-5510.30, and drm-2013-c-004914 hello, sk8, and mixed-up';
$output = preg_replace_callback('/(?=\S*[a-z])(?=\S*\d)[a-z\d]+(?:[.-][a-z\d]+)+/i', function($matches){return strtoupper($matches[0]);}, $input);
echo $output;

Prints,

3370.01B, 6510.01.B, M-5510.30, and DRM-2013-C-004914 hello, sk8, and mixed-up
0
ответ дан Pushpesh Kumar Rajwanshi 23 March 2019 в 17:15
поделиться

Я не думаю, что вы никогда не захватывали что-либо, чтобы положить в спички ...

$input = '3370.01b foo';
$output = preg_replace_callback('/(?=.*[0-9])(?=.*[a-z])(\w+(?:[-.]\w+)+)/i', function($matches){return strtoupper($matches[0]);}, $input);

echo $output;

Выход

3370.01B foo

Песочница

https://regex101.com/r/syJWMN/1 [117 ]

0
ответ дан ArtisticPhoenix 23 March 2019 в 17:15
поделиться
Другие вопросы по тегам:

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