Bug report #3960
QgsSearchTreeNode fails to handle regex string correctly.
| Status: | Closed | ||
|---|---|---|---|
| Priority: | Normal | ||
| Assignee: | - | ||
| Category: | - | ||
| Affected QGIS version: | Regression?: | No | |
| Operating System: | Easy fix?: | No | |
| Pull Request or Patch supplied: | Resolution: | ||
| Crashes QGIS or corrupts data: | Copied to github as #: | 13964 |
Description
If using regex string in a QgsSearchTreeNode and QgsSearchString the parser fails to recognize the regex string correctly.
Example running the following in the QGIS Python console:
qgis.console.clearConsole()
layer = qgis.utils.iface.mapCanvas().currentLayer()
search = QgsSearchString()
search.setString("LandUseCode ~ '\\d{2}'")
tree = search.tree()
tree.makeSearchString()
rightnode = tree.Right()
value = rightnode.valueAgainst(layer.pendingFields(),layer.selectedFeatures()[0])
value.string()
yields:
>>> layer = qgis.utils.iface.mapCanvas().currentLayer()
>>> search = QgsSearchString()
>>> search.setString("LandUseCode ~ '\\d{2}'")
True
>>> tree = search.tree()
>>> tree.makeSearchString()
PyQt4.QtCore.QString(u'(LandUseCode ~ ?{2})')
>>> rightnode = tree.Right()
>>> value = rightnode.valueAgainst(layer.pendingFields(),layer.selectedFeatures()[0])
>>> value.string()
PyQt4.QtCore.QString(u'?{2}')
>>>
>>>
The \\d part of the regex is replaced with a ? and this trips up the checkAgainst() method of QgsSearchTreeNode.
History
#1
Updated by Nathan Woodrow over 14 years ago
- Status changed from Open to Closed
It seems you need to use \\\\ with regex in Qt. So this is not really a bug and I'm going to close it.