正则表达式...
'/.*MyString[ (\/]*([a-z0-9\.\-]*)/i'
.* 匹配任意字符零次或多次
MyString 匹配该字符串。但是您正在使用不区分大小写的匹配,因此匹配的字符串将拼写“mystring”,但可以使用任何大写
编辑:(感谢 Alan Moore)[ (\/]*。这匹配任何字符 space ( 或 / 重复零多次。正如 Alan 指出的那样,/ 的最终转义是阻止 / 被视为正则表达式分隔符。
编辑:( 不需要转义,. 也不需要转义(感谢 AlexV),因为:
除 \、-、^(在开头)和
终止的 ] 在字符类中是非特殊的,但它没有
如果他们逃脱了伤害。
-- http://www.php.net/manual/en/regexp.reference.character-classes.php
连字符,一般确实需要转义,否则会尝试定义范围。例如:
[A-Z] // matches all upper case letters of the aphabet
[A\-Z] // matches 'A', '-', and 'Z'
但是,如果连字符位于列表的末尾,您可以不逃避它(但最好始终养成逃避它的习惯......我被这个抓住了)。
([a-z0-9\.\-]*) 匹配包含字符 a 到 z 的任何字符串(再次注意,这受不区分大小写的匹配影响)、0 到 9、一个点、一个连字符,重复零次或多次。周围的() 捕获这个字符串。这意味着$matches[1] 将包含[a-z0-9\.\-]* 匹配的字符串。方括号 () 告诉 preg_match “捕获”这个字符串。
例如
<?php
$input = "aslghklfjMyString(james321-james.org)blahblahblah";
preg_match('/.*MyString[ (\/]*([a-z0-9.\-]*)/i', $input, $matches);
print_r($matches);
?>
输出
Array
(
[0] => aslghklfjMyString(james321-james.org
[1] => james321-james.org
)
请注意,因为您使用不区分大小写的匹配...
$input = "aslghklfjmYsTrInG(james321898-james.org)blahblahblah";
也会在$matches[1]中匹配并给出相同的答案
希望这会有所帮助....