Creating rule-based sublists
Some options:
Pick[
lis,
StringStartsQ[lis[[All, 1]], "a"]
]
{{"ab", 2, "c", 3}, {"ac", 5, "f", 6}, {"ad", 9, "c", 10}}
Select[lis, StringStartsQ[First[#], "a"] &]
{{"ab", 2, "c", 3}, {"ac", 5, "f", 6}, {"ad", 9, "c", 10}}
Cases[lis, {_?(StringStartsQ["a"]), ___}]
{{"ab", 2, "c", 3}, {"ac", 5, "f", 6}, {"ad", 9, "c", 10}}
Alternate solutions using string patterns:
Pick[lis, StringMatchQ[lis[[All, 1]], "a" ~~ ___]]
{{"ab", 2, "c", 3}, {"ac", 5, "f", 6}, {"ad", 9, "c", 10}}
Pick[lis, StringCases[lis[[All, 1]], "a" ~~ ___] // Map[Length], 1]
{{"ab", 2, "c", 3}, {"ac", 5, "f", 6}, {"ad", 9, "c", 10}}
Pick[lis, StringPosition[lis[[All, 1]], "a" ~~ ___] // Map[MatrixQ]]
{{"ab", 2, "c", 3}, {"ac", 5, "f", 6}, {"ad", 9, "c", 10}}
A few additional variations:
Pick[lis, StringMatchQ["a*"]@lis[[All, 1]]]
{{"ab", 2, "c", 3}, {"ac", 5, "f", 6}, {"ad", 9, "c", 10}}
Pick[lis, StringTake[lis[[All, 1]], 1], "a"]
{{"ab", 2, "c", 3}, {"ac", 5, "f", 6}, {"ad", 9, "c", 10}}
Pick[lis, Order[#, "b"]& /@ lis[[All, 1]], 1]
{{"ab", 2, "c", 3}, {"ac", 5, "f", 6}, {"ad", 9, "c", 10}}