Я не совсем уверен, что вы пытаетесь сделать, но я видел "разрывы, когда группы слов включают символы синтаксиса регулярных выражений", что заставляет меня думать, что все, что вам нужно сделать, это экранировать эти символы ... т.е. поставить \ перед ними .
EDIT:
Я тоже застрял с этим, но если, если покажешь, что у меня есть, возможно, это поможет тебе:
<code><?php
$text = "<html><body><pre>
Replace all foo / bar / baz cases here:
Case 1: Text Foo text.
Case 2: Text 'Foo' Bar text Foo.
Case 3: Text Foobar (2) text.
Case 4: Text Bar & Baz.
Case 5: Text Bar Baz?
Case 6: Text Bar? & Baz?
Case 7: Text Bar-X.
Replace nothing here (text followed by brackets) or [inside square brackets]:
Case 1: Text Foo (text).
Case 2: Text 'Foo' Bar (text) Foo (text).
Case 3: Text Foobar (2) (text).
Case 4: Text Bar & Baz (text).
Case 5: Text Bar Baz (text).
Case 6: Text Bar? & Baz (text).
Case 7: Text Bar-X (text).
Case 8: [Text Foo]
";
функция convertRegexChars ($ string)
{
$ convert = str_replace ("?", "?", $ string);
$ convert = str_replace (".", ".", $ convert);
$ convert = str_replace ("*", "*", $ convert);
$ convert = str_replace ("+", "+", $ convert);
вернуть $ конвертированный;
}
$ s = массив (
массив ("t" => "Foo", "u" => "
http://www.foo.net"),
array ("t" => "'Foo' Bar", "u" => "
http://www.foo.net"),
array ("t" => "Foobar (2)", "u" => "
http://www.foo.net"),
массив ("t" => "Bar & Baz", "u" => "
http://www.foo.net"),
array ("t" => "Bar Baz?", "u" => "
http://www.foo.net"),
array ("t" => "Bar? & Baz?", "u" => "
http://www.foo.net"),
массив ("t" => "Bar-X", "u" => "
http://www.foo.net")
);
$ replace = convertRegexChars ($ text);
foreach ($ s как $ i => $ row) {
$ txt = convertRegexChars ($ row ['t']);
$ replace = preg_replace ('/(?='.$ txt.' [^ \]] [^ (]) \ b '. $ txt.' \ b / mS ',
'
'. $ TXT. ',
$ Заменен);
}
echo $ заменен;
?>