docs: def search(searchList, matchStr, numSyllables=None, wordInitial='ok',
             wordFinal='ok', spanSyllable='ok', stressedSyllable='ok',
             multiword='ok', pos=None):
      '''
      Searches for matching words in the dictionary with regular expressions
      
      wordInitial, wordFinal, spanSyllable, stressSyllable, and multiword
      can take three different values: 'ok', 'only', or 'no'.
      
      pos: a tag in the Penn Part of Speech tagset
          see isletool.posList for the full list of possible tags
      
      Special search characters:
      'D' - any dental; 'F' - any fricative; 'S' - any stop
      'V' - any vowel; 'N' - any nasal; 'R' - any rhotic
      '#' - word boundary
      'B' - syllable boundary
      '.' - anything
      
      For advanced queries:
      Regular expression syntax applies, so if you wanted to search for any
      word ending with a vowel or rhotic, matchStr = '(?:VR)#', '[VR]#', etc.
      '''
      # Run search for words
      
      matchStr = _prepRESearchStr(matchStr, wordInitial, wordFinal,
                                  spanSyllable, stressedSyllable)
      
      compiledRE = re.compile(matchStr)
      retList = []
      for word, pronList in searchList:
          newPronList = []
          for pron, posList in pronList:
              searchPron = pron.replace(",", "").replace(" ", "")
              
              # Search for pos
              if pos is not None:
                  if pos not in posList:
                      continue
              
              # Ignore diacritics for now:
              for diacritic in diacriticList:
                  if diacritic not in matchStr:
                      searchPron = searchPron.replace(diacritic, "")
              
              if numSyllables is not None:
                  if numSyllables != searchPron.count('.') + 1:
                      continue
              
              # Is this a compound word?
              if multiword == 'only':
                  if searchPron.count('#') == 2:
                      continue
              elif multiword == 'no':
                  if searchPron.count('#') > 2:
                      continue
              
              matchList = compiledRE.findall(searchPron)
              if len(matchList) > 0:
                  if stressedSyllable == 'only':
                      if all([u"ˈ" not in match for match in matchList]):
                          continue
                  if stressedSyllable == 'no':
                      if all([u"ˈ" in match for match in matchList]):
                          continue
                  
                  # For syllable spanning, we check if there is a syllable
                  # marker inside (not at the border) of the match.
                  if spanSyllable == 'only':
                      if all(["." not in txt[1:-1] for txt in matchList]):
                          continue
                  if spanSyllable == 'no':
                      if all(["." in txt[1:-1] for txt in matchList]):
                          continue
                  newPronList.append((pron, posList))
          
          if len(newPronList) > 0:
              retList.append((word, newPronList))
      
      retList.sort()
      return retList