Merkkiryhmät PHP:n säännöllisissä lausekkeissa

On olemassa erikoiskomentoja, joiden avulla voidaan valita välittömästi kokonaisia merkkiryhmiä. Komento \d tarkoittaa numeroa 0:sta 9:ään. Komento \w tarkoittaa numeroa, latinalaista kirjainta tai alaviivaa. Komento \s tarkoittaa välilyöntiä tai välilyöntimerkkiä: välilyönti, rivinvaihto, sarkain. Voit kääntää komennon merkityksen kirjoittamalla ison kirjaimen: esimerkiksi, jos \d on numero, niin \D on ei-numero.

Esimerkki

Etsitään kaikki numerot:

php<?php
  $str = '1 12 123';
  $res = preg_replace('#\d#', '!', $str);
?>

Tuloksena muuttujaan kirjoitetaan seuraava:

php'! !! !!!'

Esimerkki

Toistotoimittajat pitävät komento-ryhmiä yhtenäisenä, eli ryhmitteleviä sulkeita ei tarvita. Seuraavassa esimerkissä hakumalli näyttää tältä: numero 0:sta 9:ään yksi tai useampi kerta:

php<?php
  $str = '1 12 123 abc @@@';
  $res = preg_replace('#\d+#', '!', $str);
?>

Tuloksena muuttujaan kirjoitetaan seuraava:

php'! ! ! abc @@@'

Esimerkki

Seuraavassa esimerkissä hakumalli näyttää tältä: mitä tahansa yksi tai useampi kerta, mutta ei numero 0:sta 9:ään:

php<?php
  $str = '123abc3@@';
  $res = preg_replace('#\D+#', '!', $str);
?>

Tuloksena muuttujaan kirjoitetaan seuraava:

php'123!3!'

Esimerkki

Tässä esimerkissä hakumalli näyttää tältä: välilyöntimerkki yhden kerran:

php<?php
  $str = '1 12 123 abc @@@';
  $res = preg_replace('#\s#', '!', $str);
?>

Tuloksena muuttujaan kirjoitetaan seuraava:

php'1!12!123!abc!@@@'

Esimerkki

Tässä esimerkissä hakumalli näyttää tältä: EI välilyöntimerkki yksi tai useampi kerta. Kaikki välilyönneillä erotetut osajonot korvataan merkillä '!':

php<?php
  $str = '1 12 123 abc @@@';
  $res = preg_replace('#\S+#', '!', $str);
?>

Tuloksena muuttujaan kirjoitetaan seuraava:

php'! ! ! ! !'

Esimerkki

Tässä esimerkissä hakumalli näyttää tältä: numero tai kirjain yksi tai useampi kerta. Kaikki numeroista ja kirjaimista koostuvat osajonot korvataan merkillä '!':

php<?php
  $str = '1 12 123a Abc @@@';
  $res = preg_replace('#\w+#', '!', $str);
?>

Tuloksena muuttujaan kirjoitetaan seuraava:

php'! ! ! ! @@@'

Esimerkki

Tässä esimerkissä hakumalli näyttää tältä: EI numero eikä kirjain yksi tai useampi kerta. Tähän määritelmään sopii tapauksessamme '@@@' ja kaikki välilyönnit (ne eivät nimittäin myöskään ole numeroita eivätkä kirjaimia). Kiinnitä huomiota siihen, että lopussa on yksi '!' - siihen muuttui merkkijono ' @@@' - jossa on välilyönti edessä:

php$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);

Tuloksena muuttujaan kirjoitetaan seuraava:

php'1!12!123!Abc!'

Käytännön tehtävät

Задание 1

Annettu merkkijono:

php<?php
  $str = 'a1a a2a a3a a4a a5a aba aca';
?>

Kirjoita säännöllinen lauseke, joka löytää merkkijonot, joissa reunoissa on kirjaimet 'a', ja niiden välissä on yksi numero.

Задание 2

Annettu merkkijono:

php<?php
  $str = 'a1a a22a a333a a4444a a55555a aba aca';
?>

Kirjoita säännöllinen lauseke, joka löytää merkkijonot, joissa reunoissa on kirjaimet 'a', ja niiden välissä on mikä tahansa määrä numeroita.

Задание 3

Annettu merkkijono:

php<?php
  $str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>

Kirjoita säännöllinen lauseke, joka löytää merkkijonot, joissa reunoissa on kirjaimet 'a', ja niiden välissä on mikä tahansa määrä numeroita (mukaan lukien nolla numeroa, eli merkkijono 'aa').

Задание 4

Annettu merkkijono:

php<?php
  $str = 'avb a1b a2b a3b a4b a5b abb acb';
?>

Kirjoita säännöllinen lauseke, joka löytää seuraavanlaiset merkkijonot: reunoissa on kirjaimet 'a' ja 'b', ja niiden välissä - ei numero.

Задание 5

Annettu merkkijono:

php<?php
  $str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>

Kirjoita säännöllinen lauseke, joka löytää seuraavanlaiset merkkijonot: reunoissa on kirjaimet 'a' ja 'b', ja niiden välissä - ei kirjain eikä numero.

Задание 6

Annettu merkkijono:

php<?php
  $str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>

Kirjoita säännöllinen lauseke, joka korvaa kaikki välilyönnit merkillä '!'.