匹配所有正则表达式开头但不以字符结尾

时间:2016-12-09 20:50:52

标签: php regex

我有一系列的话 我希望将所有内容与'___'开始匹配 但有些词最后也有'___'。 但我不想匹配这些词

这是我的单词列表

___apis
___db_tables
___groups
___inbox_messages
___sent_messages
___todo
___users
___users_groups
____4underscorestarting
sinan
sssssssssss
test_______dfg
testttttt
tet____
tttttttttt
uuuuuuuu
vvvvvvvvvvvv
wwwwwwww
zzzzzzzzzz

我想只匹配这些单词

___apis
___db_tables
___groups
___inbox_messages
___sent_messages
___todo
___users
___users_groups

我不想匹配这些词

tet____
test_______dfg
____4underscorestarting

这是我尝试时的样子

enter image description here

3 个答案:

答案 0 :(得分:2)

使用// $arr is your initial array of words $matched = preg_grep("/^_{3}[^_].*/", $arr); print_r($matched); 函数的解决方案:

Array
(
    [0] => ___apis
    [1] => ___db_tables
    [2] => ___groups
    [3] => ___inbox_messages
    [4] => ___sent_messages
    [5] => ___todo
    [6] => ___users
    [7] => ___users_groups
)

输出:

/^(?!_{3})\w*/

更新要获取与相反的匹配项,请使用以下选项之一:

  • 正则表达式: preg_grep
  • PREG_GREP_INVERT函数的第三个参数设置为preg_grep("/^_{3}[^_].*/", $arr, PREG_GREP_INVERT)(... {{1}})

http://php.net/manual/en/function.preg-grep.php

答案 1 :(得分:1)

^___[a-z].*

这应该为你做。参见演示。

https://regex101.com/r/hHRg8d/1

答案 2 :(得分:0)

    ^_{3}.*[^(_{3})]$ 
  1. 以3' _'开始(^) _ {3}
  2. 可以包含中间的任何内容。*
  3. 不会在3' '中结束($) [^( {3}]