REGEX Transform a string item in UI

I am trying to solve an issue that is a by product of a Mysql error - thestring item looks like this:
`9839 mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure.

I want t strip off everything from the first space after the digits (which change) to the right

This regex works on regex101

.+?(?= mysql)

but I thinkI need to include the whoe string in the criteria and Im not sure how to do that

Can anyone help?

Where are you trying to implement this regex?

Indeed where you are defining this regex matters. But to answer you question assuming you are using the REGEX transformation add-on in openHAB, yes, the expression needs to map the whole String and the first matching group (i.e. the stuff that matches the pattern in the first ( )) is what get’s returned.

So your expression should be something like:

(.*) mysql.*

You might need to use \s instead of a literal space.

Thanks for the replies

Sorry I should have explained where I was trying - I have a string item and trying to use the Regex transform in the item profile

So is there an explanation on how to “convert” a regex string from regex101.com to be openHAB compatible?

I will try your regex @rlkoshak but it looks simpler than the one that worked on the regex site?

Basically, the only difference is that, as Rich said, the OH regex expression has to also match the entire string as well as having a capture group. In practice this means that either the start or the end (or both) of your regex needs to have a .*. In this case, I would simplify this regex even further and just use:

([0-9]*).*

This will capture all numerical digits at the start of the string, and then as soon as it finds a non-numerical digit (i.e., the space) it exits the capture and just matches the rest of the string to satisfy the OH regex requirement.

Thanks @JustinG tht works for me!

Hoping my stupid questions might help someone else as well

So the stuff within the brackets is the “bit to keep” and the .* at the end is just a “whole string” syntax for Openhab to be happy about?

I understand the [0-9] is “keeping” all digits, but then there is a * - which I would have interpreted as everything else, yet this isnt how its working?

And for my next question - is there a way to add characters to the end of the transform? The REGEX above is getting me the Kw value and I would like to add " Kw" to the end of the transformed string

OK I think I can acheive this with State Description pattern metadata:
%s Kw

Regex always works one character at a time. When there is a list or a range in brackets that means “match any one character from the set in the brackets”. So [0-9] will match any one numeral. You want more than one numeral, you want 4. The * is the symbol that means “match as many instances of the preceding character as you can”. So, [0-9]* matches nothing but numeral character and continues to do so until the first character that’s not a numeral. When the expression can’t match [0-9]* any more then it moves on to the next part of the expression which is .*. The dot (period) means “match ANY character at all”. So .* means “match as many instances of any character as you can” which, of course, is the remainder of the string.

@JustinG - great explanation - thanks so much

This topic was automatically closed 41 days after the last reply. New replies are no longer allowed.