There are two ways your players get experience.
Once you have a training complex, all your players will slowly gain experience points all day long. The higher the level of your training complex, the more experience your players receives. Players with a high talent will also receive more experience from training than players with low talent
You can find the training effectiveness of your training complex under "facilities". If, for example, your training effectiveness is 24, then a player with a talent of 2.0 will receive 48 experience per day. The basic training is done every day, the entire season. So in this case you'll get 48 times 52 = 2496 experience per season.
The second source of experience points are your matches. How much experience a player receives depends on the type of match. For league matches you'll receive more experience than for friendly matches.
Each player can count only a limited number of matches per tournament or competition per season. If your player played more than this amount of matches he will not receive any experience for that match. He can still gain experience that year in other tournaments.
The exact amount of experience a player receives per match, and the maximum number of matches a player gets experience for are shown on the page where you create your lineup. The numbers in the top-left corner of the draggable players indicate how many matches with experience that player still has left.
In the beginning you'll find that matches make up for most of the experience your players are getting. If you want more players to benefit from match experience you should vary your initial lineup and not only use your best players.
Once your training complex becomes more advanced it becomes an important source of experience though. The training complex works all year round, also on days when you have no matches and also for players that are not playing.
While it's important to let as many players benefit from match experience as possible by varying your lineup, the training complex therefore also shouldn't be ignored.
Players that don't play obviously don't receive experience from a match. If they play at least 45 minutes however, they will receive full experience. If they play less than 45 minutes they'll get some experience, but less than the maximum amount. It still counts as one match though. The exact formula is:
(max experience)*(45+(minutes played))/90
Using this rule, you can give a few more players experience per match if you substitute them in the 46th minute of the match. If you substitute them earlier or later this might harm their progress a little because the match will still be counted and they won't receive as much experience for that match as they could have.