---
title: "Regex: vad använda i.st.f. Function eregi()"
type: "forum-thread"
url: "https://www.webforum.nu/amne/webbutveckling/190026-regex-vad-använda-i-st-f-function-eregi"
topic: "Webbutveckling"
topic_url: "https://www.webforum.nu/amne/webbutveckling"
author: "Danne V"
published: "2012-07-10T07:26:13.000Z"
updated: "2012-07-10T13:52:45.000Z"
replies: 9
views: 920
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/webbutveckling/190026-regex-vad-använda-i-st-f-function-eregi"
---

# Regex: vad använda i.st.f. Function eregi()

## #1 — Danne V, 2012-07-10T07:26Z

Antar att det är regex...

Har ett gammalt php-skript gjort för php4. Function eregi() is deprecated. Vad kan man ersätta funktionen med i php5?

PS: Det gäller en newsletter-applikation som heter Ccmail. Antar att det handlar om att filtrera mailen... så här ser sjoket ut som funktionen ingår i:

```php
{
	$settings_dir = $dir; //directory to explore
	$files_array = array();
	$settings = array();
	if(is_dir($settings_dir)) {
	
	if ($handle = opendir($settings_dir)) 
	{
	while (false !== ($file = readdir($handle))) 
	{
		if(!$filenames_only && is_file($settings_dir . "/" . $file) && $file != "." && $file != ".." && ereg("\.ccmail$", $file))
			array_push($files_array, $file);
		else if($filenames_only && is_file($settings_dir . "/" . $file) && $file != "." && $file != "..")
			array_push($files_array, $file);
	}
	}
	if ($filenames_only) return $files_array; //optionally returns only the array with file names
	foreach ($files_array as $item) //creates an array with "filename" => "contents"
	{
		$file = @fopen($settings_dir . "/" . $item, "r");
		if (@flock($file, LOCK_SH)) //acquires lock
		{
			$temp = explode("\"", @fread($file, @filesize($settings_dir . "/" . $item)));
			$settings[str_replace(".ccmail", "", $item)] = trim($temp[1]);
			@flock($file, LOCK_UN); //releases lock
		}
		@fclose($file);
	}

	}
	return $settings;
}
```

Red: har det här med saken att göra: <http://www.php.net/manual/en/function.preg-replace.php>   ?

Permalänk: https://www.webforum.nu/p/190026

## #2 — metalboy, 2012-07-10T07:40Z

preg_replace() används för att ersätta en delsträng.
Titta på preg_match()

Permalänk: https://www.webforum.nu/p/2299694

## #3 — Danne V, 2012-07-10T10:48Z

> **[metalboy skrev:](https://www.webforum.nu/p/1552161)**
>
> preg_replace() används för att ersätta en delsträng.
> Titta på preg_match()

...Hmmm ok... och hur/var gör jag vad i kodsnutten ovan för att det ska funka (asså, jag vet inte ett jota om det här...all hjälp mottages med stor tacksamhet)  :r :r :r

Permalänk: https://www.webforum.nu/p/2299701

## #4 — metalboy, 2012-07-10T11:23Z

Byt ut

```php
ereg("\.ccmail$", $file)
```

mot

```php
preg_match('/\.ccmail$/', $file)
```

Notera att du med preg_match måste använda s.k. avgränsare (delimiters) i ditt mönster.
PHP tillåter att man använder i stort sett vilket tecken som helst som avgränsare, jag som programmerade Perl innan jag började med PHP tycker det känns naturligt att använda / i de flesta fall.

 :)

Permalänk: https://www.webforum.nu/p/2299702

## #5 — Danne V, 2012-07-10T11:52Z

> **[metalboy skrev:](https://www.webforum.nu/p/1552170)**
>
> Byt ut
>
>
> ```php
> ereg("\.ccmail$", $file)
> ```
>
> 
> mot
>
>
> ```php
> preg_match('/\.ccmail$/', $file)
> ```
>
> 
> 
> Notera att du med preg_match måste använda s.k. avgränsare (delimiters) i ditt mönster.
> PHP tillåter att man använder i stort sett vilket tecken som helst som avgränsare, jag som programmerade Perl innan jag började med PHP tycker det känns naturligt att använda / i de flesta fall.
> 
>  :)

Najs!

Nu försvann de första felmeddelandena och jag kunde i vart fall försöka skicka ett testmail. Men då kom ett nytt felmeddelande:

```
Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in /home/polaris/public_html/ccmail/functions/shared.php on line 45
```

Rad 45 i den filen är den som börjar "if (preg_match($regexp...." nedan

```php
{
	$regexp = "^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$";
	if (preg_match($regexp, $email)) return true;
	else return false;
}
```

Hur fixar man det?  :r  :r  :r  skäms en gång till...

Permalänk: https://www.webforum.nu/p/2299703

## #6 — metalboy, 2012-07-10T12:00Z

Nu är det det där med avgränsare jag nämnde.
Du måste ha ett tecken som är likadant i början och slutet av strängen. T.ex. /. Det tecken du väljer måste specialkodas om det ska användas inne i strängen genom att sätta \\ framför.

Exempel:

```php
$regexp = "/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/";
```

Permalänk: https://www.webforum.nu/p/2299706

## #7 — Danne V, 2012-07-10T12:42Z

> **[metalboy skrev:](https://www.webforum.nu/p/1552176)**
>
> Nu är det det där med avgränsare jag nämnde.
> Du måste ha ett tecken som är likadant i början och slutet av strängen. T.ex. /. Det tecken du väljer måste specialkodas om det ska användas inne i strängen genom att sätta \\ framför.
> 
> Exempel:
>
>
> ```php
> $regexp = "/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/";
> ```

Ållrajt, det var där dom skulle vara alltså. Nu funkade det galant!
Tusen tack för hjälpen!

Permalänk: https://www.webforum.nu/p/2299708

## #8 — Danne V, 2012-07-10T13:05Z

Äsch..det var ju inte slut med det.
Nu dök följande felmeddelande upp:

```
Warning: preg_replace() expects at least 3 parameters, 2 given in /home/polaris/public_html/ccmail/admin.php on line 585
```

Där hade jag lagt in vad jag antog var rätt: 

```php
	if (preg_replace("/^[0-9]+$/", $applied_settings['max_displayed_recipients']) && preg_replace("/^[0-9]+$/", $applied_settings['pause_for']) && preg_replace("/^[0-9]+$/", $applied_settings['pause_every']))
	{
```

Orkar du är det skitbussigt. Orkar du inte, så får jag försöka överleva....

PS: Det fungerar i alla fall, trots felmeddelandena. Så det är ju ingen katastrof...

Permalänk: https://www.webforum.nu/p/2299709

## #9 — metalboy, 2012-07-10T13:10Z

Jag tror du har skrivit fel funktionsnamn bara ;)
Ändra till preg_match() :)

Permalänk: https://www.webforum.nu/p/2299710

## #10 — Danne V, 2012-07-10T13:52Z

> **[metalboy skrev:](https://www.webforum.nu/p/1552181)**
>
> Jag tror du har skrivit fel funktionsnamn bara ;)
> Ändra till preg_match() :)

Ooooops...
Nu gick det bättre.
Tack.

Permalänk: https://www.webforum.nu/p/2299713

---

Tråden på webben: https://www.webforum.nu/amne/webbutveckling/190026-regex-vad-använda-i-st-f-function-eregi
