jimmydorry Posted March 2, 2011 Share Posted March 2, 2011 I can't seem to get this OR statement working... it's the '|' character. expression: '%\](.*)(\(|\[)%mis' string: '[HnG] DD Hokuto no Ken 02 (TV) [8BC696B8].avi' result: ' DD Hokuto no Ken 02 (TV) ' expected result: ' DD Hokuto no Ken 02 ' Link to comment https://forums.phpfreaks.com/topic/229377-preg_match-general-problem-with-regex/ Share on other sites More sharing options...
sasa Posted March 2, 2011 Share Posted March 2, 2011 try '%\](.*?)(\(|\[)%mis' Link to comment https://forums.phpfreaks.com/topic/229377-preg_match-general-problem-with-regex/#findComment-1181900 Share on other sites More sharing options...
jimmydorry Posted March 2, 2011 Author Share Posted March 2, 2011 try '%\](.*?)(\(|\[)%mis' Wow, it bloody works. Would you mind explaining what the '?' does, and how you knew to use it? Thanks a heap man. EDIT: From what I understand, it means that the phrase can occur 0 or 1 times. Link to comment https://forums.phpfreaks.com/topic/229377-preg_match-general-problem-with-regex/#findComment-1181903 Share on other sites More sharing options...
AbraCadaver Posted March 2, 2011 Share Posted March 2, 2011 try '%\](.*?)(\(|\[)%mis' Wow, it bloody works. Would you mind explaining what the '?' does, and how you knew to use it? Thanks a heap man. EDIT: From what I understand, it means that the phrase can occur 0 or 1 times. ? makes the .* "ungreedy", so it doesn't match the ( or [. Alternate way (untested): '%\][^\(\[]+[\(\[]%i' Not sure if you needed the capturing parentheses but I removed them. Link to comment https://forums.phpfreaks.com/topic/229377-preg_match-general-problem-with-regex/#findComment-1181979 Share on other sites More sharing options...
AbraCadaver Posted March 2, 2011 Share Posted March 2, 2011 Not sure if you needed the capturing parentheses but I removed them. Oh, I see you did: '%\]([^\(\[]+)[\(\[]%i' Link to comment https://forums.phpfreaks.com/topic/229377-preg_match-general-problem-with-regex/#findComment-1181981 Share on other sites More sharing options...
jimmydorry Posted March 2, 2011 Author Share Posted March 2, 2011 try '%\](.*?)(\(|\[)%mis' Wow, it bloody works. Would you mind explaining what the '?' does, and how you knew to use it? Thanks a heap man. EDIT: From what I understand, it means that the phrase can occur 0 or 1 times. ? makes the .* "ungreedy", so it doesn't match the ( or [. Alternate way (untested): '%\][^\(\[]+[\(\[]%i' Not sure if you needed the capturing parentheses but I removed them. I understand your alternate solution better, and will have to try it later. Thanks for the explanations though, and for both solutions. If I understand correctly, the alternate solution utilises the regex operator of NOT EQUAL TO. Thus it is saying grab everything after ']' that is not '(' OR '['. Link to comment https://forums.phpfreaks.com/topic/229377-preg_match-general-problem-with-regex/#findComment-1181983 Share on other sites More sharing options...
AbraCadaver Posted March 2, 2011 Share Posted March 2, 2011 I understand your alternate solution better, and will have to try it later. Thanks for the explanations though, and for both solutions. If I understand correctly, the alternate solution utilises the regex operator of NOT EQUAL TO. Thus it is saying grab everything after ']' that is not '(' OR '['. Yes. I'm not sure if it makes a difference but I tend to use character classes [] a lot. Link to comment https://forums.phpfreaks.com/topic/229377-preg_match-general-problem-with-regex/#findComment-1181993 Share on other sites More sharing options...
jimmydorry Posted March 2, 2011 Author Share Posted March 2, 2011 Oh, and your solution worked as intended. Link to comment https://forums.phpfreaks.com/topic/229377-preg_match-general-problem-with-regex/#findComment-1181995 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.