www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Where do you test syntax of D regexp online?

reply Suliman <evermind live.ru> writes:
I wrote two regexp:

--------------------
auto inlineCodeBlock = regex("`(.*?)`"); // -->  `(.*?)`
auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g"); // -->  
`{3}[\s\S]*?`{3}
--------------------
First for for selection inline code block. Second for multi-line:
--------------------
#Header
my header text

##SubHeader
my sub header text `foo inline code`

```
void foo()
{
    writeln("ppp");
}
```

###Sub3Header
my sub 3 text `bar inline code`

#Header2
my header2 text
--------------------

It's work fine in online editor https://regex101.com/r/EC5WRu/1 
(sic! \\s\\S double escaped in D code).

But after compilation of code:

auto x = content.matchFirst(bigCodeBlock);
writeln(x);


print:
[]
[]

It's seems that D regexp work in another way. How can I test them?
Mar 09
parent reply rikki cattermole <rikki cattermole.co.nz> writes:
On 10/03/2017 3:50 AM, Suliman wrote:
 I wrote two regexp:

 --------------------
 auto inlineCodeBlock = regex("`(.*?)`"); // -->  `(.*?)`
 auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g"); // -->
 `{3}[\s\S]*?`{3}
 --------------------
 First for for selection inline code block. Second for multi-line:
 --------------------
 #Header
 my header text

 ##SubHeader
 my sub header text `foo inline code`

 ```
 void foo()
 {
    writeln("ppp");
 }
 ```

 ###Sub3Header
 my sub 3 text `bar inline code`

 #Header2
 my header2 text
 --------------------

 It's work fine in online editor https://regex101.com/r/EC5WRu/1 (sic!
 \\s\\S double escaped in D code).

 But after compilation of code:

 auto x = content.matchFirst(bigCodeBlock);
 writeln(x);


 print:
 []
 []

 It's seems that D regexp work in another way. How can I test them?
I would use dpaste and write a quick script but here is where I think your problem is: regex("/.*/g") It should be: regex(".*", "g") As per[0]. [0] http://dlang.org/phobos/std_regex.html#.regex
Mar 09
parent reply Suliman <evermind live.ru> writes:
 I would use dpaste and write a quick script but here is where I 
 think your problem is:

 regex("/.*/g")

 It should be:

 regex(".*", "g")

 As per[0].

 [0] http://dlang.org/phobos/std_regex.html#.regex
Sorry, but what regexp are you talking? There is nothing like: `regex("/.*/g")` in my code...
Mar 09
parent reply rikki cattermole <rikki cattermole.co.nz> writes:
On 10/03/2017 4:17 AM, Suliman wrote:
 I would use dpaste and write a quick script but here is where I think
 your problem is:

 regex("/.*/g")

 It should be:

 regex(".*", "g")

 As per[0].

 [0] http://dlang.org/phobos/std_regex.html#.regex
Sorry, but what regexp are you talking? There is nothing like: `regex("/.*/g")` in my code...
Yes there was: auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g");
Mar 09
parent reply Suliman <evermind live.ru> writes:
On Thursday, 9 March 2017 at 15:22:00 UTC, rikki cattermole wrote:
 On 10/03/2017 4:17 AM, Suliman wrote:
 I would use dpaste and write a quick script but here is where 
 I think
 your problem is:

 regex("/.*/g")

 It should be:

 regex(".*", "g")

 As per[0].

 [0] http://dlang.org/phobos/std_regex.html#.regex
Sorry, but what regexp are you talking? There is nothing like: `regex("/.*/g")` in my code...
Yes there was: auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g");
I still can't get it work in real code :(
Mar 09
parent reply Suliman <evermind live.ru> writes:
Adding "r" helped:

auto bigCodeBlock = regex(r"`{3}[\s\S]*?`{3}");

But now output is:
[["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]

But I do not \r\n\ symbols...
Mar 09
next sibling parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Thursday, 9 March 2017 at 16:14:28 UTC, Suliman wrote:
 But now output is:
 [["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]

 But I do not \r\n\ symbols...
That's just the writeln array formatter. The matchFirst function returns an array of hits (that allows captures, btw you might need to use \( instead of ( to get the capture, god i hate regex) so writeln tries to print the whole array and that's how it does embedded newlines. So you have the correct result, just written strangely.
Mar 09
parent reply Suliman <evermind live.ru> writes:
On Thursday, 9 March 2017 at 16:23:23 UTC, Adam D. Ruppe wrote:
 On Thursday, 9 March 2017 at 16:14:28 UTC, Suliman wrote:
 But now output is:
 [["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]

 But I do not \r\n\ symbols...
That's just the writeln array formatter. The matchFirst function returns an array of hits (that allows captures, btw you might need to use \( instead of ( to get the capture, god i hate regex) so writeln tries to print the whole array and that's how it does embedded newlines. So you have the correct result, just written strangely.
How should I write to file result without \r\n\ symbols? auto x = content.matchFirst(bigCodeBlock); File f = File("foo.txt", "w"); f.write(x); foo.txt: ["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]
Mar 09
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Thursday, 9 March 2017 at 16:40:13 UTC, Suliman wrote:
 How should I write to file result without \r\n\ symbols?

 auto x = content.matchFirst(bigCodeBlock);

 File f = File("foo.txt", "w");
 f.write(x);
Just f.write(x[0]); to write out the whole hit instead of the collection of references.
Mar 09
parent reply Suliman <evermind live.ru> writes:
On Thursday, 9 March 2017 at 16:47:18 UTC, Adam D. Ruppe wrote:
 On Thursday, 9 March 2017 at 16:40:13 UTC, Suliman wrote:
 How should I write to file result without \r\n\ symbols?

 auto x = content.matchFirst(bigCodeBlock);

 File f = File("foo.txt", "w");
 f.write(x);
Just f.write(x[0]); to write out the whole hit instead of the collection of references.
What can be wrong with this regexp? https://regex101.com/r/8e7nPL/3 it's crush D compiler, and I can't find out why
Mar 10
parent Suliman <evermind live.ru> writes:
On Friday, 10 March 2017 at 14:36:48 UTC, Suliman wrote:
 On Thursday, 9 March 2017 at 16:47:18 UTC, Adam D. Ruppe wrote:
 On Thursday, 9 March 2017 at 16:40:13 UTC, Suliman wrote:
 How should I write to file result without \r\n\ symbols?

 auto x = content.matchFirst(bigCodeBlock);

 File f = File("foo.txt", "w");
 f.write(x);
Just f.write(x[0]); to write out the whole hit instead of the collection of references.
What can be wrong with this regexp? https://regex101.com/r/8e7nPL/3 it's crush D compiler, and I can't find out why
I need simply select parts from one first-level # to another. like: #header some text and some code ^ first matching #header2 some text2 and some code2 ^ second matching
Mar 10
prev sibling parent rikki cattermole <rikki cattermole.co.nz> writes:
On 10/03/2017 5:14 AM, Suliman wrote:
 Adding "r" helped:

 auto bigCodeBlock = regex(r"`{3}[\s\S]*?`{3}");

 But now output is:
 [["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]

 But I do not \r\n\ symbols...
\r\n is Windows new line characters.
Mar 09