Russian Qt Forum

Qt => Общие вопросы => Тема начата: Иволга от Август 16, 2022, 14:08



Название: Регулярные выражения
Отправлено: Иволга от Август 16, 2022, 14:08
Здравствуйте

Есть код:
Код:
QProcess proc;
QStringList env = proc.systemEnvironment();
qDebug() << env;
qDebug() << env.indexOf(QRegExp("HOME=*"));


Результат работы кода:
Цитировать
+9.215: DBG: ("QT_QPA_PLATFORM=photon:no_offscreen", "_=/tmp/poSKP/bin/poSKP", "LD_LIBRARY_PATH=:/opt/qt571/x86/lib:/opt/mesa3d/x86/lib:/opt/gcc/lib", "SSH_CONNECTION=192.168.180.1 57359 192.168.180.136 22", "PATH=/sbin:/usr/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/bin:/opt/sbin:/usr/qnx650/host/qnx6/x86/usr/bin:/usr/qnx650/host/qnx6/x86/usr/sbin:/usr/qnx650/host/qnx6/x86/sbin:/usr/qnx650/host/qnx6/x86/bin:/usr/qnx650/host/qnx6/x86/usr/photon/appbuilder", "SHELL=/bin/sh", "MAKEFLAGS=-I/usr/qnx650/target/qnx6/usr/include", "QNX_HELP_HOME_PAGE=/usr/qnx650/target/qnx6/usr/help/product/momentics/bookset.html", "HOSTNAME=modelBM", "USER=root", "TMPDIR=/tmp", "MAIL=/var/spool/mail/root", "PROCESSOR=x86", "HOME=/root", "SSH_CLIENT=192.168.180.1 57359 22", "QNX_HOST=/usr/qnx650/host/qnx6/x86", "QNX_TARGET=/usr/qnx650/target/qnx6", "QNX_HELP_PATH=/usr/qnx650/target/qnx6/usr/help/product", "QNX_CONFIGURATION=/etc/qnx", "LOGNAME=root", "SYSNAME=nto", "PHOTON=/dev/photon")
+9.216: DBG: -1

Почему не нашлась строка "HOME=/root" (присутствует в выводе)?

OC QNX 6.5.0, Qt 5.7.1


Название: Re: Регулярные выражения
Отправлено: kambala от Август 16, 2022, 14:37
потому что надо внимательно читать документацию:
Цитировать
Returns the index position of the first exact match
с твоей регуляркой найдутся лишь следующие строки: HOME, HOME=, HOME== и т.д.

лучше пройдись циклом по списку используя str.startsWith(QLatin1String{"HOME="})

другие варианты:
- создать QRegExp в режиме wildcard, тогда по идее твоя регулярка сработает
- использовать регулярку HOME=.*

если планируется в будущем переход на Qt 6, то лучше откажись от QRegExp и используй QRegularExpression


Название: Re: Регулярные выражения
Отправлено: Иволга от Август 16, 2022, 15:13
Цитировать
- использовать регулярку HOME=.*
Спасибо, это сработало.