Если бы все наши строки имели ----
, мы просто использовали бы это выражение:
(?=.*hello).*
Тест
$re = '/(?=.*hello).*/m';
$str = '----hello, how are you----
----how are you,hello, how are you----
----how are you hello, how are you----
----hello how are you , how are you----
----how are you , how are you----
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Если нет, и нам нужно проверить ----
, мы бы расширили наше выражение до:
(?=.*hello)(----.+?----)
Тест
$re = '/(?=.*hello)(----.+?----)/m';
$str = '----hello, how are you----
----how are you,hello, how are you----
----how are you hello, how are you----
----hello how are you , how are you----
----how are you , how are you----
---hello how are you , how are you---
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
RegEx
Если это выражение нежелательно и вы хотите изменить его, перейдите по этой ссылке на regex101.com .
RegEx Circuit
jex.im визуализирует регулярные выражения:
![enter image description here](https://i.stack.imgur.com/evLXb.png)
И наш код может выглядеть следующим образом:
$re = '/(?=.*hello)(----.+?----)/m';
$fh = fopen('/path/to/our/file/ara.txt', 'r') or die($php_errormsg);
while (!feof($fh)) {
$line = fgets($fh, 4096);
preg_match_all($re, $line, $matches, PREG_SET_ORDER, 0);
var_dump($matches);
}