我需要一个匹配7
字母单词的正则表达式,该单词以'st'
开头。
例如,它只应与以下'startin'
start startin starting
匹配
答案 0 :(得分:5)
一般提示:
起始符号直接包含在正则表达式中,例如st
。
如果起始字符在正则表达式语法(如点,括号等)的意义上是特殊的,则需要使用反斜杠转义它们,但在您的情况下不需要它。
在起始符号之后,为“单词”的其余字符添加字符类。如果要允许所有字符,请使用点:.
。如果要允许所有非空白字符,请使用\S
。如果您只想允许(unicode)字母,请使用\p{L}
。要仅允许非重音拉丁字母,请使用[A-Za-z]
。这里有很多种可能性。
最后,为上一步中的字符类添加重复量词。在你的情况下,st
之后你需要正好5个字符,所以重复量词是{5}
。
如果您只想匹配整个字符串,请在开头使用\A
,在正则表达式结束时使用\z
。或者在正则表达式的开头/结尾包含\b
以匹配所谓的字边界(包括字符串的开头/结尾,空格,标点符号)。
最强大的选择(完全控制)是所谓的 lookahead - 为了简单起见,我会把它留在这里。
有关详细信息,请参阅this tutorial。您可以查找我提到的特定关键字,例如重复,字符类, unicode , lookahead 等。
答案 1 :(得分:1)
要匹配不区分大小写的非重音字符的单词,您需要i
修饰符,或者在两种情况下都需要在开头声明两个字母。
<?php
$regex = '!\bst[a-z]{5}\b!i';
$words = "start startin starting station Stalker SHOWER Staples Stiffle Steerin StÄbles'";
preg_match_all($regex,$words,$matches);
print_r($matches[0]);
?>
<强>输出强>
Array
(
[0] => startin
[1] => station
[2] => Stalker
[3] => Staples
[4] => Stiffle
[5] => Steerin
)
使用与上面相同的输出,如果您没有使用i
修饰符,则必须声明更多字符:
$regex = '!\b[Ss][Tt][A-Za-z]{5}\b!';
如果要匹配Unicode字符,可以执行以下操作:
print "<meta charset=\"utf-8\"><body>";
$regex = '!\bst([a-z]|[^u0000-u0080]){5}\b!iu';
$words = "start startin starting station Stalker SHOWER Staples Stiffle Steerin StÄbles'";
preg_match_all($regex,$words,$matches);
print_r($matches[0]);
print "</body>";
<强>输出强>
Array
(
[0] => startin
[1] => station
[2] => Stalker
[3] => Staples
[4] => Stiffle
[5] => Steerin
[6] => StÄbles //without UTF-8 output it looks like this-> StÃ"bles
)
答案 2 :(得分:0)
preg_match_all('/\bst\w{5}\b/', 'start startin starting', $arr, PREG_PATTERN_ORDER);
更新:根据评论
使用前后的字边界