docs: def strings(self, otherchar=None):
  		'''
  			Each time next() is called on this iterator, a new string is returned
  			which will the present lego piece can match. StopIteration is raised once
  			all such strings have been returned, although a regex with a * in may
  			match infinitely many strings.
  		'''
  
  		# In the case of a regex like "[^abc]", there are infinitely many (well, a
  		# very large finite number of) single characters which will match. It's not
  		# productive to iterate over all of these giving every single example.
  		# You must supply your own "otherchar" to stand in for all of these
  		# possibilities.
  		for string in self.to_fsm().strings():
  
  			# Have to represent `fsm.anything_else` somehow.
  			if fsm.anything_else in string:
  				if otherchar == None:
  					raise Exception("Please choose an 'otherchar'")
  				string = [
  					otherchar if char == fsm.anything_else else char
  					for char in string
  				]
  
  			yield "".join(string)